【发布时间】:2014-06-28 16:10:55
【问题描述】:
当gridview 再次变为databound 时,如何在gridview's templatefield 中保留在TextBox 中输入的值?
谁能告诉我为什么?
也许可以帮助我找到解决方案?
例如,我单击 A 按钮,单击事件为 Gridview1.DataBind(),但我们丢失了 TextBoxes 上的所有值。
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
<ContentTemplate>
<%--post GridView--%>
<asp:GridView ID="posts" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<%--Comments Gridview--%>
<asp:GridView ID="comments" runat="server"></asp:GridView>
<%--a Textbox and bUtton For sending new Comment--%>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
protected void Button1_Click(object sender, EventArgs e)
{
posts.DataSource = GetData();
posts.DataBind();
}
编辑1
让我解释一下,当用户发送新评论时,我将向所有其他用户广播一条消息(带有信号器)以更新他们的 Gridviews(当客户端收到广播消息 button1_Click 时,将由 jquery 调用)。我的问题是,如果其他用户在他们的文本框上输入新的 cmets,将会丢失他们输入的 cmets。
【问题讨论】:
-
通常,您应该使用 ViewState 或 SessionState 对象来保留 Page PostBack 或 Re-load 之间的控件值。 Rgds,
-
@AlexBell 原因不是 PostBack ,而是因为 posts.DataBind();
-
那么你应该使用第二个选项,即:将值存储在SessionState对象中(请参考我在stackoverflow.com/questions/24468464/…的帖子)Rgds,
-
每一行都有一个文本框,比如我的gridview有15行,如何全部保存??