当 ASP 下拉列表位于 GridView 中时,在 C# 代码中无法识别它

本文关键字:代码 识别 下拉列表 ASP 中时 GridView | 更新日期: 2023-09-27 18:34:36

我有以下问题,我不知道为什么会这样。我在网格视图中声明了一个下拉列表:

<asp:GridView ID="grdMappingList" runat="server" OnPageIndexChanging="grdMappingList_PageIndexChanging"  AutoGenerateColumns="false" AllowPaging="true" PageSize="10"  ShowHeaderWhenEmpty="true" UseAccessibleHeader="true" CssClass="table table-hover table-striped segment_list_tbl" >
                            <PagerStyle CssClass="grid_pagination" HorizontalAlign="Right" VerticalAlign="Middle" BackColor="#DFDFDF" />
                            <Columns>
                                <asp:BoundField HeaderText="Mapping Id" DataField="MAPPING_ID"></asp:BoundField>  
                                <asp:TemplateField HeaderText="Mapping Status" HeaderStyle-CssClass="width_120 aligned_center" ItemStyle-CssClass="width_120 aligned_center" Visible="true">
                                        <ItemTemplate>
                                            <asp:DropDownList id="ddgvOpp" runat="server" >
                                                <asp:ListItem Text="DONE"  Value="True"></asp:ListItem>
                                                <asp:ListItem Text="NOT DONE"  Value="False"></asp:ListItem>
                                                </asp:DropDownList>
                                        </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>

以上是我的aspx代码。id="ddgvOpp"的下拉列表在我的cs代码中无法识别。

    private void InitializeDepartmentsDDL()
{
    List<ReplaceParameter> param = new List<ReplaceParameter>();
    //new- project selection
    param.Add(new ReplaceParameter("PROJECT_ID", Convert.ToInt32(User_Data["SelectedProj"].Rows[0]["ProjectID"].ToString())));
    DataTable AvailableDepartments = (DataTable)DQManager.Execute("LoadDepartments", null, param);
    ddgvOpp.DataSource = AvailableDepartments;
    ddgvOpp.DataTextField = "Text";
    ddgvOpp.DataValueField = "Value";
    ddgvOpp.DataBind();
    ddgvOpp.Items.Insert(0, new ListItem("Please Select...", "-1"));
}

我得到的错误是ename ddgvOpp在当前上下文中不存在。请记住,如果将下拉列表放在网格视图之外,则一切正常。

请帮忙吗?

上述问题已解决。现在我面临以下问题。所以这是我的代码:

<asp:DropDownList id="ddlMappingStatus" runat="server"  SelectedValue='<%# Bind("MappingCompleted") %>'     OnSelectedIndexChanged="ddlMappingStatus_SelectedIndexChanged" AutoPostBack="true">
    <asp:ListItem Text="Done"  Value="DONE"></asp:ListItem>
    <asp:ListItem Text="Not Done"  Value="NOT DONE"></asp:ListItem>
</asp:DropDownList>

当我调用ddlMappingStatus_SelectedIndexChanged以获取特定行的所有属性时,不会返回任何内容。我无法获取特定行的值,而且DropDownList ddgvOpp = (DropDownList)grdMappingList.SelectedRow.FindControl("ddlMappingStatus");给出了null对象的异常

当 ASP 下拉列表位于 GridView 中时,在 C# 代码中无法识别它

如果要在GridViewTemplateField中获取对控件的引用,则必须使用GridViewRow.FindControl("ControlID"),因为行是NamingContainer而不是页面。

if(grdMappingList.SelectedRow != null)
{
    DropDownList ddgvOpp = (DropDownList) grdMappingList.SelectedRow.FindControl("ddgvOpp");
    // ...
}

这假定您要查找GridView的选定行的DropDownList。如果你想找到所有你必须循环行:

foreach(GridViewRow row in grdMappingList.Rows)
{
     DropDownList ddgvOpp = (DropDownList) row.FindControl("ddgvOpp");
     // ...
}