【问题标题】:How do I preserve a value entered in a TextBox inside a gridview's templatefield when the gridview gets databound again?当gridview再次获得数据绑定时,如何保留在gridview模板字段内的TextBox中输入的值?
【发布时间】: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行,如何全部保存??

标签: c# asp.net gridview


【解决方案1】:

要将字符串数组存储在SessionState 对象中,然后将其读回,请参考以下示例代码sn-ps:

string[] _arr = {"a", "b", "c" }; // sample array - replace by 15 entries pertinent to your case
Session["arrString"] = _arr ;

SessionState读回来:

string[] arrFromSession = (string[])Session["arrString"];

希望这会有所帮助。 Rgds,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2014-08-18
    • 1970-01-01
    相关资源
    最近更新 更多