【问题标题】:null value in findcontrol of gridview, item template confusiongridview的findcontrol中的null值,item模板混淆
【发布时间】:2013-07-04 10:41:59
【问题描述】:

我有 gridview 的模板字段如下:

<asp:TemplateField ShowHeader="False">
            <EditItemTemplate>
            <asp:TextBox ID="txtEmpName" runat="server"></asp:TextBox>
                <asp:TextBox ID="txtBonus" runat="server"></asp:TextBox>
                <asp:TextBox ID="txtID" runat="server"></asp:TextBox>
            </EditItemTemplate>
                    <EditItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" 
                            CommandName="Update" Text="Update"></asp:LinkButton>
                        &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
                            CommandName="Cancel" Text="Cancel"></asp:LinkButton>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" 
                            CommandName="Edit" Text="Edit"></asp:LinkButton>

                    </ItemTemplate>
                </asp:TemplateField>

当我在gv_RowUpdating事件中,我想通过findcontrol获取编辑字段的值。

为此,我使用以下代码:

`TextBox txtUname = (TextBox)gv.Rows[e.RowIndex].FindControl("txtEmpName");`

但每次在我调试代码时,它都会向我显示txtUname 中的null 值。

可能是什么问题?

完整的事件代码:

 protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            try
            {

                TextBox txtUname = (TextBox)gv.Rows[e.RowIndex].FindControl("txtEmpName");

                float bonus = float.Parse(gv.DataKeys[e.RowIndex].Values["bonus"].ToString());

                try
                {
                    cmd = new SqlCommand("update emp set empName=@eName");
                    cmd.parameters.AddParametersWithValue("@eName",txtUname.Text);
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                }
            }
            catch (Exception ex)
            {
            }

        }

编辑

protected void Page_Load(object sender, EventArgs e)
        {

            con = new SqlConnection("Data Source=192.168.51.71;Initial Catalog=WebBasedNewSoft;User ID=sa;password=prabhu");

            BindGrid();
        }
        private void BindGrid()
        {
            try
            {
                da = new SqlDataAdapter("select * from emp", con);
                DataSet ds = new DataSet();
                da.Fill(ds);
                GridView1.DataSource = ds.Tables[0];
                GridView1.DataBind();
            }
            catch (Exception ex)
            {
            }
        }
        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            int index = GridView1.EditIndex;

            GridViewRow row = GridView1.Rows[index];

            string eName = ((TextBox)row.Cells[2].Controls[0]).Text.ToString().Trim();

            try
            {
                con.Open();
                cmd = new SqlCommand("update emp set empName='"+eName+"'",con);
                cmd.ExecuteNonQuery();
                con.Close();
            }
            catch(Exception ex)
            {
            }

        }

        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
            BindGrid();
        }
    }

【问题讨论】:

  • 你能显示完整的事件功能吗??
  • @AmitSingh 是的,当然,等一下。
  • @AmitSingh 粘贴函数
  • 请不要使用两个编辑模板使用单个..like this &lt;EditItemTemplate&gt; &lt;asp:TextBox ID="txtEmpName" runat="server"&gt;&lt;/asp:TextBox&gt; &lt;asp:TextBox ID="txtBonus" runat="server"&gt;&lt;/asp:TextBox&gt; &lt;asp:TextBox ID="txtID" runat="server"&gt;&lt;/asp:TextBox&gt; &lt;asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"CommandName="Update" Text="Update"&gt;&lt;/asp:LinkButton&gt;&amp;nbsp;&lt;asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel"&gt;&lt;/asp:LinkButton&gt;&lt;/EditItemTemplate&gt;
  • 但这显示了除了编辑链接按钮之外的文本框

标签: c# asp.net .net visual-studio-2010


【解决方案1】:

参考这个

http://www.codeproject.com/Articles/37207/Editable-Gridview-with-Textbox-CheckBox-Radio-Butt

还将您的代码用于编辑命令。它可能是 RowEditing 或 RowCommand

【讨论】:

  • 我应该怎么做才能从默认文本框中获取值,每个字段在我按下编辑链接后出现?
  • 没什么。参考此代码。您只需设置 EditIndex 并再次绑定网格,您就会将值放入您的文本框中。确保您已设置绑定到控件.... protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex;显示网格(); }
  • 先生,控件现在正在获取值,但是当我在文本框中编辑值并按下更新按钮时,页面会刷新并显示旧值。
  • 您是否将更新的值保存到数据库中?如果是,重新绑定网格。如果否,请将值更改为您使用的数据源,然后重新绑定网格。
  • 先生,请看我的编辑,我已经完成了,这是我完整的服务器端代码
猜你喜欢
  • 1970-01-01
  • 2013-03-16
  • 2012-10-31
  • 2011-05-17
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 2014-02-12
相关资源
最近更新 更多