Forms Data Controls :: FormView Custom Data Binding
Sep 7, 2010FormView custom data binding problem
View 7 RepliesFormView custom data binding problem
View 7 RepliesIn an vwd2005 aspx page, I have a formview, dropdownlist and 2 sqldatasources. My markup is below
[Code]....
When the dropdownlist causes the postback, the formview does not display the data (it's there, I've double checked using query analyzer). Also, the OnIndexChanged only makes a button visible and has nothing to do with the data. What am I missing?
<asp:RadioButtonList ID="RadioButtonList2" runat="server" selectedvalue='<%# Bind("FieldNameTbl") %>' RepeatDirection= "Vertical" RepeatLayout= "Table">
<asp:listitem value="0">I</asp:listitem>
<asp:listitem value="1">T</asp:listitem>
</asp:RadioButtonList>
This is how it works for a radio button list in a formview insert template.
I have a FormView which will bind values from the database using a ID parameter from queryString. In my database, I have a field named CategoryList which can store multiple CategoryID (From Category table) in CSV format (eg: "1,3,4,5"). I'm using SQLDataSource as my datasource.
So, I want to show the selected category in CheckBoxList. Meaning that, the checkbox will be checked (on page load) if its ID is in the CategoryList. Also, I want to allow the user to check/uncheck the CheckBoxList and updates to the database in CSV format. How can i do that?
I have a sql-bound formview with three DDL's bound to individual SQL datasources. In edit mode, I want to set the selected value to the formview's value, and this works:
<asp:DropDownList
ID="ddl2"
runat="server"
DataSourceID="ddl2lDS"
DataValueField="Name"
SelectedValue='<%# Eval("Name") %>'
/>
But it only works when there's a match between what's in the formview's DS and the DDL's DS.
Unfortunately, there may be instances where the the formview's DS may return a null value or a value different from the DDL's datasource...and when that happens I receive a compilation error like:
'ddl2' has a SelectedValue which is invalid because it does not exist in the list of items.
Parameter name: value
What do I need to do to trap that condition before attempting to set the selected value? Do I need to set the selected value of the DDL in formview's dataBinding or dataBound event, by looping through the DDL and checking for a match first?
I am trying to display data in a formview based on the value selected from the drop down list. FormView does not respond or display any data.
<b>Select a vendor:</b>
<asp:DropDownList ID="vendorDropDownList" runat="server"
DataSourceId="SqlDataSource1"
AutoPostBack="True" DataTextField="CO_Vendor_Name"
[Code]....
I want to bind an object to a form view.
[Code]....
Now, is it possible to generate a new object on update, without getting and reading each textbox with findcontrol?
im learning webforms and asp.net in general and what i have so far is a formview that displays data being pulled from a sqldatasource, but i also want a checkboxlist that can be used to input information and display information. this checkboxlist is insode the formview. the problem im having is that my formview is calling a datasource with an specific stored procedure with one table and my checkboxlist needs to called another stored procedure that has a different table. formviews does not allow you to have tow different datasources so how can i make this possible? ill paste the front end code and the backend code so you guys can see what im trying to do.
[Code]....
backend:
[Code]....
and my util where the booleans are being set
[Code]....
I select a item from gridView and trying to show/update/delete in From view. In Form View I am using the dropdownlist filling it in Code behind. Then i bound the list. But the problem is it is not showing the slected value. Here is the code
asp code <asp:GridView ID="grdVRegion" runat="server" AllowPaging="True"
AutoGenerateColumns="False"
Width="525px" PageSize="20" DataKeyNames="intPKCountry_DetailID" [code]....
I have a formview bound to an entitydatsource and it is working fine. here's the scenario though
If the querystring contains a "memberID" , I have setup an object datasource to fetch the results corresponding to the memberid from the database.
I want the name and email id fields in the formview to default to these values in the objectdatasource. How can you do this?
I have a label inside a formview that is not bound to anything.
Lets say I have a table of customers (with a key field called CustomerID), and then another table that has all their orders (with amount spent per order (OrderID) - based on CustomerID)
On the FormView there is a key field (CustomerID) (this is to be used as an INPUT parameter to a SP - which is to return the SUM of all the customers (Order_Totals). I could nest a view within a view I suppose to get this result, however, I just want a label to simply show this ScalarValue.
Basically, I want the label to show the aggregate (SUM) total amount each customer has spent on all orders. I have a SP called SumCost with two Fields (one a grouped by field CustomerID and the other a Summed Total of each customer's orders SumCost)
SELECT [SumCost] FROM [SumCost] WHERE ([CustomerID] = @CustomerID)
I test my SP and it works great, returning the value based on CustomerID - no problem.
My problem is getting the CustomerID passed into the SP on runtime (do I put it in FormView2_Databound) and putting the value into the label (CustTotalLbl) which is inside this form.
I'm using an edittemplate to handle both editing and inserting for a Formview. In Insert mode, the Identity parameter is not needed (and cannot be used in the parameter list). In Edit mode, I need the bound value to know which record to update. So, what I tried to do is set the Text property in the OnDataBinding method.
[Code]....
The result is that the field is bound for Insert anyway, shows up as a parameter, and my insert statement fails (since this extra field messes up the field order of the parameters). Plus, it is always null in Insert mode by definition.
Is the OnDataBinding method too late to clear the property? If so, where can I do this, since PageLoad is too early (the template has not loaded yet and I cannot Findcontrol the field. Or is there a better way to handle all this?
Okay, here's something that I could easily do the hard way and manually wire up each form element and save it to a datatable in memory, but there has to be a more efficient way to do it.
Here's what I have:
1. A strongly typed datatable and tableadapter in a XSD name Orders
2. A formview control which currently is connected to an ODS connected to the Orders tableadapter, this makes it easy to wire up the databindings for each form field in design view
I would like to:
- bind the the formview to an instance of the strongly typed datatable, and then save the dt to a session object without interacting with the actual database
- load forms on subsequent pages from the dt in session
- ultimately save the dt info to an actual database table on the third page
I've read some solutions where a custom class is created, but to me this seems like almost as much work as wiring up the form field to the table columns manually in code.
I have been reading alot about this and for some reason I am just not able to grasp the concept. Hopefully someone here can enlighten me.As an example situation I have a collection of strongly typed User objects that represent a database table, and some properties that represent its columns: UserID(PK), Username,FirstName,LastName, etc..Here are some of my requirements/goals:1. Users/Objects needs to be bound to the gridview programatically.2. I do not want to update the database right away, I only want the underlying collection to be updated. I would like to call the database update method myself when I am ready.
3. I do not want the primary key stored on the client side.Summary:So I bind a List<Users> to a gridview with the appropriate bound fields set up, I exlude bound fields such as primary key because I don't want it being changed/hacked by the client side. When I edit and update a row it is saved back to the collection of objects. I will iterate through the objects manually at a later time and commit them to database.
Questions:1. Can I cast a gridview row directly back to my object, in the RowUpdating or RowUpdated events? I am assuming I can't... So....2. How can I reference back my original collection if the gridview does not contain a primary key?3. Where do I store my collection, should it be in Session or should I recreate it on each postback?Sorry if any of this is confusing, let me know if you need clarification.
Being A C++ programmer this is fairly new to me - I am working on a formview and have been facing a problem- The issue is simple - I want to display a success page after I insert a row successfully and a custom error page if the insertion fails (due to datatype or format mismatch with table in database).
To achieve this I am doing as follows -
1. Defining a custom error page in ASP.NET configuration tool (webconfig)
>> This page never works if I enter an incorrect format in formview. It would rather display the ugly page with Server Error information (for example) -
The string was not recognized as a valid DateTime. There is a unknown word starting at index 0.
question - Why my default page is not getting displayed? Is it because I am testing from same development machine or is it because the error page doesnt work for "Server Error" pages?
2. In the "iteminserted" event I am redirecting it to Response.Redirect("~/newitemconfirm.aspx")
>> If I do this, irrespective of whether the row insertion was successful or not, this confirmation page always gets displayed! I want it to be displayed only on successful insertion.
I don't much care for the template rigmarole of the ASP.NET FormView web forms control. It seems the only way to access template defined controls is to 'capture' module level references to the wanted controls in the ItemCreated data binding event, for use in other tasks and event handlers. Ideally I would just like to be able to call set this.DataSource and call this.DataBind on a page, but only the latter is possible through inheritence, and doesn't achieve any of my normal data binding needs. What else is there besides the hairy, scary FormView control?
View 1 RepliesI need to do a custom update for a form view (I think/know), as some of the parameters that are required for updating values should not be updated by the users, such as userid of the person performing the action which is passed back to the database for auditing purposes.
Additionally, there are some fields, such as LastUpdatedBy, LastUpdatedDate that need to be seen, but not edited. The stored procedure on the backend takes care of this, and these are not parameters for the Update method. The FormView by default is trying to pass all these values back to the database.
Lasty, the select query of the object datasource is a stored procedure that performs several joins based on PF/FK relationships to bring back more meaningful information than just a FK, so some columns are just the joined value, and can not be updated directly. Again, formview is trying to pass these parameters
So given that, I have defined the following even handler for a simple form view:
(not sure if this is the way to proceed given the above, but...)
protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
ProjectDetailsDataSource.UpdateParameters.Clear();
ProjectDetailsDataSource.UpdateParameters.Add("projectID", ((Guid)e.Keys["ProjectID"]).ToString());
ProjectDetailsDataSource.UpdateParameters.Add("projectName", (string)e.NewValues["ProjectName"]);
ProjectDetailsDataSource.UpdateParameters.Add("description", (string)e.NewValues["Description"]);
ProjectDetailsDataSource.UpdateParameters.Add("projectTypeID", "1");
ProjectDetailsDataSource.UpdateParameters.Add("statusID", "1");
ProjectDetailsDataSource.UpdateParameters.Add("productID", null);
ProjectDetailsDataSource.UpdateParameters.Add("isComplete", ((bool)e.NewValues["IsComplete"]).ToString());
ProjectDetailsDataSource.UpdateParameters.Add("isActive", ((bool)e.NewValues["IsActive"]).ToString());
ProjectDetailsDataSource.UpdateParameters.Add("userid", Membership.GetUser().ProviderUserKey.ToString());
ProjectDetailsDataSource.Update();
FormView1.ChangeMode(FormViewMode.ReadOnly);
e.Cancel = true;
}
My questions are as follows:
1) Is this the right approach?
2) Is so, when I cancel the edit (because I did the update myself), and change mode, the FormView returns to read only mode as inteneded (good so far). However, when I hit F5 (refresh), the ItemUpdating method is called again, and updates the database.
I have method that I call which needs to find all the panels in the page but it fails. I have another method that was created by the VS has the traditional paraeters such the object sender, EventArgs e that the similar code works fine but the (simplyfied) code below. It is clear to me that these parameters contain information that makes one method work while the other not, but I don't know why.
The code breaks on the last line of code: _pnlAssetInfo = (Panel.....
[Code]....
I have the follow form view:
<asp:FormView
DefaultMode="Edit"
ID="FormView1"
runat="server"
onitemupdating="FormView1_ItemUpdating">
<EditItemTemplate>
<asp:TextBox
ID="txtPrimerNombreNatural"
runat="server"
SkinID="texto"
MaxLength="30"
Text='<%#Bind("PrimerNombre") %>'></asp:TextBox>
<asp:TextBox
ID="txtSegundoNombreNatural"
runat="server"
SkinID="texto"
MaxLength="30"
Text='<%#Bind("SegundoNombre") %>'></asp:TextBox>
</EditItemTemplate>
</asp:FormView>
<asp:Button
ID="Actualizar"
runat="server"
Text="Button"
CommandName="Update"
/>
This formview is bound in this way:
protected void Page_Load(object sender,
EventArgs e)
{
Persona _persona =
new
Persona();
_persona.ObternerPersonaByUserIdApp(1);
List<SILPA.AccesoDatos.Generico.PersonaIdentity> persona =
new
List<SILPA.AccesoDatos.Generico.PersonaIdentity>();
persona.Add(_persona.Identity);
FormView1.DataSource = persona;
FormView1.DataBind();
}
When the page is shown, the textbox are filled correctly, this textbox are filled with the "primernombre" and "segundonombre" properties from the persona class. After this, If I change the textbox, and after click the update button, I need to update the persona class with the changes from the textboxes, then I call a ActualizarPersona method for updating the database. How can I do for update the persona class when I change the textboxes and click the update button? I try this method protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs
e)
{
}
I have a gridview with item template and I want the text in that item template label to come from a method in a code behind.
Here is my gridview:
[Code]....
[Code]....
[Code]....
I want to call this method but I'm getting the errors: "
"The best overloaded method match for 'employeepayment.RegTime(string)' has some invalid arguments"
"Argument '1': cannot convert from 'object' to 'string'"
Someone know the answer?. I thought I was right to use Eval.
I would like to ask if it is possible to access data on a master FormView from a nested detail FormView.
I have a main form (master) with several tabs (detail) and would like to display a label with text from main form that is hidden by the tab at the moment of editting. My asp page looks like this.
[Code]....
Is it possible to get the value of the label CompanyTextLabel from CompanyTextBox using just ASP.NET expressions or something similar without writing c# code in .cs file?
I have a FormView that I user for updating a record. There is a link button that when fires should perforom the updating via BLL and DAL. I am not using built-in ODS and I will not condsider using it. I have all my grids and formviews populated manuualy by calling methods that fetch the data from the database. For instance my details view is populated like this:
protected void DlMembers_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName.ToString() == "Select")
{
DlMembers.Visible = false;
lblError.Text = string.Empty;
lblError.Visible = false;
fvMemberDetail.Visible = true;
fvMemberDetail.ChangeMode(FormViewMode.Edit);
MemberBLL getMemberInfo = new MemberBLL();
int Ident = Convert.ToInt32(e.CommandArgument.ToString());
fvMemberDetail.DataSource = getMemberInfo.GetMemberByIdent(Ident);
fvMemberDetail.DataBind();
}
if (e.CommandName.ToString() == "DeleteSelected")
{
DlMembers.Visible = true;
lblError.Text = string.Empty;
lblError.Visible = false;
fvMemberDetail.Visible = false;
fvMemberDetail.ChangeMode(FormViewMode.ReadOnly);
}
What I want to do if to capature my linkbutton on click event and do this (except that the runtime never reaches this method):
protected void MemberInfoUpdating(object sender, EventArgs e)
{
TextBox id = (TextBox)fvMemberDetail.FindControl("txtIdent");
if (id.Text != string.Empty || id.Text != "")
{
TextBox txtFN = (TextBox)fvMemberDetail.FindControl("txtFN");
TextBox txtLN = (TextBox)fvMemberDetail.FindControl("txtLN");
DropDownList ddlAddress = (DropDownList)fvMemberDetail.FindControl("ddlAddress");
TextBox txtEmail = (TextBox)fvMemberDetail.FindControl("txtEmail");
TextBox txtHPhone = (TextBox)fvMemberDetail.FindControl("txtHPhone");
TextBox txtWPhone = (TextBox)fvMemberDetail.FindControl("txtWPhone");
TextBox txtMPhone = (TextBox)fvMemberDetail.FindControl("txtMPhone");
DropDownList ddlPos = (DropDownList)fvMemberDetail.FindControl("ddlPos");
DropDownList ddlIsAdmin = (DropDownList)fvMemberDetail.FindControl("ddlIsAdmin");
bool blIsAdmin = false;
if (ddlIsAdmin.SelectedValue == "True") blIsAdmin = true;
TextBox txtComments = (TextBox)fvMemberDetail.FindControl("txtComments");
MemberBLL updateMemberInfo = new MemberBLL();
bool UpdateOK = updateMemberInfo.UpdateMemberByIdent(
txtFN.Text,
txtLN.Text,
ddlAddress.SelectedValue,
txtEmail.Text,
txtHPhone.Text,
txtWPhone.Text,
txtMPhone.Text,
blIsAdmin,
txtComments.Text,
Convert.ToInt32(ddlPos.SelectedValue),
Convert.ToInt32(id.Text));
}
else
{
//Display error - no user id cannot update record
}
}
The linkbutton looks like this:
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True"
OnClick="MemberInfoUpdating" Text="Update" />
Does anyone know where I can find some info on how to support data binding in my control? I would like to get data primarily from a sql server.
View 3 RepliesI have a Formview binded in the code file to a generic list. Now, upon editing of a record, I wish to access the Keys and NewValues out of the FormViewUpdateEventArgs parameter of the ItemUpdating event handler method. From what I've tried and searched over the internet as of now, I've come to know that updated values are only available if the Formview is set a data source control on the markup page else they'd be null. Is this true?
Secondly, at this moment I am casting the sender object to formview and individually filling each object property by using FindControl method to find and retrieve values present in the controls. Is this the best way to do this task? As an example, this is what I am doing atm:
FormView currentForm = (FormView)sender;
ListObject.ID = new Guid(((HiddenField)(currentForm.FindControl("hdnID"))).Value);
ListObject.Name = ((TextBox)(currentForm.FindControl("txtName"))).Text;
I'd like to implement a custom paging template for my formview that displays numeric paging as well as next/previous buttons. The pre-defined templates only appear to have numeric first last as an option. Can anyone recommend a good article that covers this?
View 2 Replies