gpt4 book ai didi

c# - 为什么GridViewRow的 "FindControl"找不到下拉列表?

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:41 26 4
gpt4 key购买 nike

两个异常(exception):

  1. 索引越界
  2. FindControl 返回 null(假装或未检测到控件)

cs 代码:(现在下拉列表只需要在编辑模式下填充)

protected void GridView3_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView3.EditIndex = e.NewEditIndex;
ShowData("a"); //bind data

GridViewRow gVR = GridView3.Rows[GridView3.EditIndex];

aspx代码:

                 <asp:TemplateField HeaderText="x" ItemStyle-CssClass="ix">
<EditItemTemplate>
<asp:DropDownList ID="xnList" runat="server" Text='<%# Bind("[columnx]")%>'>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("[columnx]") %>'></asp:Label>
</ItemTemplate>
<ItemStyle CssClass="ix" />
</asp:TemplateField>

在上面的代码片段中,就在第 3 行,我遇到了以下错误。这是荒谬的,因为同样适用于其他 gridview 并且这个 gridview 有 10 行,所以绝对不会超出范围。这可能是什么问题?

引用资料:

编辑:

那些慷慨地尝试并抽出时间帮助我解决问题的人,please check out Jeff Atwood's blog post about Page.FindControl.看完感觉我的dropdownlist绝对是Gridview中的child... Given this post, it comes much closer to what I have encountered. .但我不是 100% 确定,如果同样的情况适用于我正在努力解决的问题,因为我有两个 GridView 。然而,只有一个具有编辑模式控件 - 另一个是普通的gridvos。有人可以告诉我正确的方向吗?

编辑:我已经尝试了以上每个链接的答案/解决方案。目前没有工作。

最佳答案

正如许多人所指出的那样,RowDataBound() 是为 gridview 中的控件 Hook 数据以进行编辑、更新或显示模式的正确事件。我很绝望,然后尝试了 Row_Updating。但这不是我遇到的错误的问题。

主要是由于Text='<%# Bind("[columnx]")%>' 的,

<asp:DropDownList ID="xnList" runat="server" Text='<%# Bind("[columnx]")%>'>

所以最终的解决方案是根据那里发布的任何答案。

CS:

    protected void GridView3_RowDataBound(object sender, GridViewRowEventArgs e)
{

if (e.Row.RowType == DataControlRowType.DataRow)
{
if ((e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)
{
DropDownList ddl = e.Row.FindControlRecursive("dhl") as DropDownList;
DropDownList stageDDL = e.Row.FindControlRecursive("dhl") as DropDownList;
stageDDL.DataSource = this.clservice.Getstuff("someparam");
stageDDL.DataTextField = "columnx";
stageDDL.DataValueField = "columnx";
stageDDL.DataBind();

}
}
}

aspx:

            <asp:TemplateField HeaderText="x" ItemStyle-CssClass="ix">
<EditItemTemplate>
<asp:DropDownList ID="xnList" runat="server" DataTextField="columnx" DataValueField="columnx">
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("[columnx]") %>'></asp:Label>
</ItemTemplate>
<ItemStyle CssClass="ix" />
</asp:TemplateField>

关于c# - 为什么GridViewRow的 "FindControl"找不到下拉列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24771214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com