为什么不是" FindControl"找到的下拉列表? GridViewRow?

时间:2014-07-16 02:22:46

标签: c# asp.net gridview

两个例外:

  1. 索引超出范围
  2. FindControl返回null(它假装或未检测到控件)
  3. cs code :(现在只需要在编辑模式下填充下拉列表)

    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.阅读它,我觉得我的下拉列表绝对是Gridview中的一个孩子...... Given this post, it comes much closer to what I have encountered.。 但我不是百分百肯定,如果同样的情况适用于我正在努力的事情,因为我有两个网格视图。但是只有一个具有编辑模式控件 - 另一个是普通的 gridvos。有人能告诉我正确的方向吗?

    修改: 我已经尝试了以上链接的每个答案/解决方案。截至目前无人工作。

1 个答案:

答案 0 :(得分:2)

正如许多人所指出的,RowDataBound()是挂钩数据的正确事件,用于gridview中用于编辑,更新或显示模式的控件。我很绝望,然后尝试了Row_Updating。我不知道错误的问题。

这主要归功于<{1}}

Text='<%# Bind("[columnx]")%>'

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

CS:

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

ASPX:

    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();

            }
        }
    }