Asked by:
Get dropdown value in GridView while in Edit Mode

Question
-
User-2051535749 posted
I have a gridview that when the user clicks [Edit], I populate a dropdown list. The dropdown is populated in code behind in the RowDataBound() method. When the users makes a selection I want to capture that value in my update method. In the update method, I need to get the selected value and I'm unable to find the dropdown control.
How can I get the selected value of the drop down when in Edit Mode and from my update method?
Grid:
<asp:GridView ID="GridView" runat="server" DataKeyNames="Id" AutoGenerateColumns="False" DataSourceID="GridViewDataSource2" GridLines="None" AllowPaging="True" PageSize="25" OnRowDataBound="GridView_RowDataBound" OnRowUpdated="RowUpdated"> <Columns> <asp:CommandField HeaderText="Edit" ButtonType="Image" CancelImageUrl="~/images/cancel.gif" EditImageUrl="~/images/edit.gif" ShowEditButton="True" UpdateImageUrl="~/images/save.gif"> <ItemStyle CssClass="GridViewEdit" /> </asp:CommandField> <asp:BoundField DataField="ManufactureName" HeaderText="Manufacturer" SortExpression="Manufacturer" /> <asp:TemplateField ConvertEmptyStringToNull="False" HeaderText="Description"> <ItemTemplate> <%#Eval("Manufacturer").ToString() %> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="EditManu" runat="server" Text='<%# Bind("Manufacturer") %>'></asp:TextBox> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField ConvertEmptyStringToNull="False" HeaderText="Category"> <ItemTemplate> <asp:Label ID="category" runat="server" Text='<%#Eval("PrimaryCategory").ToString() %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="Category" runat="server"></asp:DropDownList> </EditItemTemplate> </asp:TemplateField>
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) { if(e.Row.RowType == DataControlRowType.DataRow && (e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit) { DropDownList MainCategory = (DropDownList)e.Row.FindControl("Category"); Cat1.DataSource = GetManufacturers.Categories(); Cat1.DataTextField = "ManuName"; Cat1.DataValueField = "ManuId"; Cat1.DataBind(); } } protected void RowUpdated(object sender, GridViewUpdatedEventArgs e) { Manufacturer.Details manu = new Manufacturer.Details(); DropDownList Cat1 = (DropDownList)e.Row.FindControl("Category"); // get error object reference not set to an instance of an object manu.Category = Cat1.SelectedItem.Value.ToString(); }
Friday, October 5, 2018 7:09 PM
All replies
-
User-1716253493 posted
Use rowupdating event instead, based gv editindex you can find the control
But updated event, editindex is -1
Saturday, October 6, 2018 1:51 PM -
User-1171043462 posted
Refer
https://www.aspsnippets.com/Articles/Populate-DropDownList-with-Selected-Value-in-EditItemTemplate-of-GridView-in-ASPNet.aspxSunday, October 7, 2018 8:02 AM -
User-2051535749 posted
I looked at this prior to posting and I get an 500 error on this:
string selectedCity = DataBinder.Eval(e.Row.DataItem, "City").ToString();ddlCities.Items.FindByValue(selectedCity).Selected = true;Exception message: Object reference not set to an instance of an object.
and the selected value isn't being saved, how can I get that?
this returns nothing:
protected void EditCustomer(object sender, GridViewEditEventArgs e){gvCustomers.EditIndex = e.NewEditIndex;this.BindGrid();}Monday, October 8, 2018 11:50 AM -
User-2051535749 posted
I got it working, I had to create a hidden field, and populate that field when the text changed in the dropdown.
Monday, October 8, 2018 1:33 PM -
User-1171043462 posted
If my post helped. Pls mark Answer
Monday, October 8, 2018 1:48 PM