ASP 下拉列表在 GridView 中时无法在 C# 代码中识别
ASP Dropdownlist is not recognized in C# code when it is in GridView
我遇到以下问题,我不知道为什么会这样。我在网格视图中声明一个下拉列表:
<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代码。我的 cs 代码无法识别带有 id="ddgvOpp" 的下拉列表。
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。请记住,如果在 gridview 之外获取下拉列表,一切正常。
有什么帮助吗?
以上问题已解决。现在我面临以下问题。所以这是我的代码:
<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
object
的异常
如果要在 GridView
的 TemplateField
中获取对控件的引用,则必须使用 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");
// ...
}
我遇到以下问题,我不知道为什么会这样。我在网格视图中声明一个下拉列表:
<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代码。我的 cs 代码无法识别带有 id="ddgvOpp" 的下拉列表。
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。请记住,如果在 gridview 之外获取下拉列表,一切正常。
有什么帮助吗?
以上问题已解决。现在我面临以下问题。所以这是我的代码:
<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
object
如果要在 GridView
的 TemplateField
中获取对控件的引用,则必须使用 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");
// ...
}