我创建了一个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方法)。
答案 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中丢失引用。