如何在asp.net中发生indexchanging事件时检索gridview中的文本框值?

时间:2016-02-06 07:57:55

标签: asp.net gridview

我有一个绑定到ObjectDataSource的GridView。我为网格中的每一行添加了一个文本框和一个按钮,以允许用户输入日期并单击按钮进行订阅。 GridView中此文本框中不存在任何字段,并在运行此页面时返回null引用。 我该怎么办?请帮忙.. 这是ASPX文件和背后的代码:

<asp:TemplateField HeaderText="content" ItemStyle-Width="150"> <ItemTemplate> <asp:TextBox ID="Name" runat="server" /> </ItemTemplate> <ItemStyle Width="150px"></ItemStyle> </asp:TemplateField> <asp:ButtonField CommandName="Select" Text="save" ButtonType="Button" />

代码隐藏:

 protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
    GridViewRow row = GridView1.Rows[e.NewSelectedIndex];

    string s = row.Cells[0].Text;
            //Fetch value of Name.

    TextBox tb = (TextBox)GridView1.FindControl("Name");
    string name = tb.Text;
}

name的值为null ...

2 个答案:

答案 0 :(得分:0)

GridViewRow也有FindControl方法。你可以试试,

protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
    GridViewRow row = GridView1.Rows[e.NewSelectedIndex];
    TextBox tb = row.FindControl("Name") as TextBox;
    String name = tb.Text;
}

答案 1 :(得分:0)

你可以在行命令事件中也这样做。尝试这个..

添加OnRowCommand="gvProducts_RowCommand" 然后在代码背后

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
     if (e.CommandName.Equals("Select"))
        {
         GridViewRow row = GridView1.Rows[e.RowIndex];
         TextBox tb = (TextBox)row.FindControl("Name");
         string name = tb.Text;
         }
     }