在网格视图中单击编辑按钮后,将dropdown的旧值赋给相同的下拉列表

本文关键字:dropdown 下拉列表 视图 网格 单击 编辑 按钮 编辑按 | 更新日期: 2023-09-27 18:16:01

我失去了下拉列表值,而单击编辑按钮。我试图获取值并将其分配给下拉菜单但我得到了错误提示-

对象引用未设置为对象的实例。

它应该不会重置,直到我们改变下拉菜单。

aspx代码

<asp:TemplateField HeaderText="Cat Id">
                    <ItemTemplate>
                        <asp:Label ID="lblCatId" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, 
"Categoryname") %>'></asp:Label>
                    </ItemTemplate>
                     <ItemStyle HorizontalAlign="Left" Width="20px" />
<HeaderStyle HorizontalAlign="Left" Width="20px" />
 <FooterStyle Width="20px" /> 
                    <EditItemTemplate>
                    <asp:Label ID="lblCategory" runat="server" Text='<%#Eval("Categoryname")%>' 
Visible="true"></asp:Label>
                         <asp:DropDownList ID="DDl_CateName" runat="server" onkeydown="return (event.keyCode!
=13);" >
                </asp:DropDownList>
                    </EditItemTemplate>
                    <FooterTemplate>
                     <asp:DropDownList ID="DDl_AddCateName" runat="server" onkeydown="return 
(event.keyCode!=13);" >
                  </asp:DropDownList>
                    </FooterTemplate>
                </asp:TemplateField>

aspx.cs代码

if (e.Row.RowType == DataControlRowType.DataRow && gvDaySubmission.EditIndex == e.Row.RowIndex)
        {
            DropDownList ddlCategories = (DropDownList)e.Row.FindControl("DDl_CateName");
            string query = "select * from tbl_Category";
            SqlCommand cmd = new SqlCommand(query);
            ddlCategories.DataSource = GetData(cmd);
            ddlCategories.DataTextField = "Categoryname";
            ddlCategories.DataValueField = "CategoryId";
            ddlCategories.DataBind();
            ddlCategories.Items.FindByValue((e.Row.FindControl("lblCategory") as Label).Text).Selected = true;//getting error in this line

在网格视图中单击编辑按钮后,将dropdown的旧值赋给相同的下拉列表

您正在获得该错误,因为您试图找到的标签文本可能不存在,或者它可能包含下拉集合中的空白。你可以这样避免这个错误:-

string category = (e.Row.FindControl("lblCategory") as Label).Text;
ListItem item = ddlCategories.Items.FindByText(category);
if(item != null)
    item.Selected = true;