在Gridview中更改TextBox数据(asp net c#)

时间:2019-02-14 18:00:05

标签: c# asp.net

我创建了一个gridview,其中包含填充在后端的文本框:

<asp:GridView ID="grvMyTest" runat="server" AutoGenerateColumns="False"
EnableModelValidation="True" Height="30%" TabIndex="9" 
AllowSorting="True" Width="100%" Visible="true" AllowPaging="True" 
PageSize="20" CssClass="mGrid" PagerStyle-CssClass="pgr">
  <Columns>
     <asp:TemplateField HeaderText="Jan">
        <ItemTemplate>
           <asp:TextBox ID="tbjan" runat="server" Text='<%# Eval("mJan") %>' 
              Width="50px" style="text-align: center"></asp:TextBox>
        </ItemTemplate>
      <HeaderStyle BackColor="Control" HorizontalAlign="Center" />
      <ItemStyle HorizontalAlign="Center" />
   </asp:TemplateField>

在后端,我希望当用户单击按钮时,我想检索TextBox的值以在数据库中更新:

<asp:Button runat="server" Text="Alter values" id="testButton" OnClick="clickedButton" />

后端代码:

protected void clickedButton(object sender, System.EventArgs e)
{
  foreach (GridViewRow row in grvMyTest.Rows) //Running all lines of grid
  {
      TextBox value = ((TextBox)(row.Cells[0].FindControl("mJan")));
   }
}

但是,即使在网格中显示的数据库中给出了该值,该值也始终为null。

页面加载时,将显示以下值: Grid 但是,当单击按钮时,该值为null(clickedButton方法)。

2 个答案:

答案 0 :(得分:1)

一个非常快速和简单的解决方案是将一个Label添加到GridView并将其Visiblity设置为false。

<asp:TextBox ID="tbjan" runat="server" Text='<%# Eval("mJan") %>'></asp:TextBox>
<asp:Label ID="tbjanLabel" runat="server" Text='<%# Eval("mJan") %>' Visible="false"></asp:Label>

然后您可以在后面的代码中比较这些值

 TextBox value = (TextBox)(row.FindControl("tbjan"));
 Label lbl = (Label)(row.FindControl("tbjanLabel"));

 if (lbl.Text == value.Text)
 {
     //no change
 }

答案 1 :(得分:0)

补充VDWWD响应,确保页面未调用回发并从gridview中丢失引用。