从后面的代码访问时,Gridview FooterRow文本框文本为null

时间:2010-10-27 08:45:36

标签: c# .net asp.net gridview

我有一个包含以下列的GridView

     <asp:TemplateField HeaderText="Name">
         <FooterTemplate>
             <asp:TextBox ID="txt_Name" runat="server"></asp:TextBox>
         </FooterTemplate>
       <ItemTemplate>
         <asp:Label ID="lbl_name" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "t_Name") %>' />             
       </ItemTemplate>  
       <EditItemTemplate>
         <asp:TextBox ID="txt_name" runat="server" Width="100px" Text='<%#DataBinder.Eval(Container.DataItem,"t_Name") %>'></asp:TextBox>
       </EditItemTemplate>        
     </asp:TemplateField>

     <asp:TemplateField HeaderText="Created By">
       <ItemTemplate>
          <asp:Label ID="lbl_tabcreatedby" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "t_CreatedBy") %>' />
       </ItemTemplate>
     </asp:TemplateField>

       <asp:CommandField HeaderText="Modify" ShowEditButton="True" />

       <asp:CommandField HeaderText="Delete" ShowDeleteButton="True" />

       <asp:TemplateField HeaderText="Add a New Name">
           <FooterTemplate>
               <asp:LinkButton ID="lnkbtn_AddName" runat="server" CommandName="Insert">Add Name</asp:LinkButton>
           </FooterTemplate>
       </asp:TemplateField>

然后在Code Behind中我试图以

的形式访问txt_Name文本框
protected void gv_Name_RowCommand(object sender, GridViewCommandEventArgs e)
{             
  string t_Name = ((TextBox)(gv_Name.FooterRow.FindControl("txt_Name"))).Text;
  // Insert Code
}

但是我每次都在字符串t_Name中得到null,而不管txt_Name的当前文本是什么。 但是,如果我禁用页面的ViewState,我可以获取文本。任何解释。

4 个答案:

答案 0 :(得分:2)

我通过使用其他变量解决了这个问题,请参阅以下内容:

Dim txtBox As TextBox = GridView1.FooterRow.FindControl("txtName")
Dim name As String = txtBox.Text

答案 1 :(得分:0)

或者您可以尝试按列索引获取文本框,如下所示:

protected void gv_Name_RowCommand(object sender, GridViewCommandEventArgs e)
{
    string t_Name = ((TextBox)(gv_Name.FooterRow.Cells[5].FindControl("txt_Name"))).Text;
    // Insert Code
}

答案 2 :(得分:0)

在gv_Name_RowCommand事件中尝试以下代码

if (e.CommandName.Equals("Insert"))
 {
string t_Name = ((TextBox)(gv_Name.FooterRow.FindControl("txt_Name"))).Text; 
} 

这应该有效

答案 3 :(得分:-1)

我认为数据网格在回发后与数据源断开连接。如果您确定来自db的数据/数据值不为空。