在代码后单击按钮时刷新更新面板

本文关键字:刷新 更新 按钮 代码 单击 | 更新日期: 2023-09-27 17:51:25

我正在使用一个使用数据源的Gridview &数据绑定。当我重新加载页面gridview更新,但我希望它是在buttonclick,但它不适合我。

updatepanel中的gridview:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="upWall" runat="server" ChildrenAsTriggers="true" UpdateMode="conditional">
        <ContentTemplate>
            <asp:GridView ID="gvWallPosts" runat="server" AutoGenerateColumns = "false" 
             CaptionAlign="NotSet" CellPadding="5">
            <Columns>
                <asp:TemplateField HeaderText="Avsändare">
                    <ItemTemplate>
                        <%# GetSender((int)Eval("WallSender"))%>
                        <br />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Inlägg">
                    <ItemTemplate>
                        <%# Eval("Post")%>
                        <br />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:TextBox ID="txtWall" runat="server" Height="105px" TextMode="MultiLine" Width="227px"></asp:TextBox>
    <br />
    <asp:Button ID="btnWall" runat="server" Text="Posta" onclick="btnWall_Click" />

后台代码:

protected void btnWall_Click(object sender, EventArgs e)
    {
        con.SendWallPost(con.GetId(Membership.GetUser().UserName), Convert.ToInt32(Request.QueryString["ID"]), txtWall.Text); //This method is sending the post
        upWall.Update();
    }

所以,我想让updatepanel在ButtonClick上更新,我不想重载整个页面来查看结果

在代码后单击按钮时刷新更新面板

因为我没有看到按钮btnWall,我假设它在UpdatePanel之外。但是如果你想允许UpdatePanel之外的控件触发回发,你需要定义一个显式触发器。

因此您可以使用AsyncPostBackTrigger:

<asp:UpdatePanel ID="upWall" runat="server" ChildrenAsTriggers="true" UpdateMode="conditional">
     <ContentTemplate>
         ....
     </ContentTemplate>
     <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnWall" EventName="Click" />
     </Triggers>
 </asp:UpdatePanel>

默认情况下,在更新面板中启用部分页面更新,因为ScriptManager控件的EnablePartialRendering属性的默认值为true。将按钮放在更新面板中就足以满足您的需求,因为该按钮在面板中充当异步回发控件。然后在更新之后添加这一行(gvwallosts . databind())。让我知道进展如何。

protected void btnWall_Click(object sender, EventArgs e)
{
    con.SendWallPost(con.GetId(Membership.GetUser().UserName), Convert.ToInt32(Request.QueryString["ID"]), txtWall.Text); //This method is sending the post
    //upWall.Update();
    gvWallPosts.DataBind();
}

试着像这样设置你的标记

  <asp:ScriptManager ID="ScriptManager1" runat="server">
   </asp:ScriptManager>
      <asp:UpdatePanel ID="upWall" runat="server" ChildrenAsTriggers="true" UpdateMode="conditional">
    <ContentTemplate>
        <asp:GridView ID="gvWallPosts" runat="server" AutoGenerateColumns = "false" 
         CaptionAlign="NotSet" CellPadding="5">
        <Columns>
    <asp:Templatefield>
   <asp:Button ID="btnWall" runat="server" Text="Posta" command="Edit" />
     </asp:TemplateField>
            <asp:TemplateField HeaderText="Avsändare">
                <ItemTemplate>
                    <%# GetSender((int)Eval("WallSender"))%>
                    <br />
                </ItemTemplate>
                <EditItemTemplate>
                      <asp:TextBox Text='<%# Bind("WallSender")%>' />
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Inlägg">
                <ItemTemplate>
                    <%# Eval("Post")%>
                    <br />
                </ItemTemplate>
                   <EditItemTemplate>
                     <asp:TextBox  Text='<%# Bind("Post")%>'/>
                </EditItemTemplate>
            </asp:TemplateField>
        </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

在您的网格行更新事件

  protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{

    con.SendWallPost(con.GetId(Membership.GetUser().UserName),    Convert.ToInt32(Request.QueryString["ID"]), txtWall.Text); 
     gvWallPosts.DataBind();

}

确保页面加载中的Binding代码也被夹在

中间
 If(!IsPostBack)
     {
                   }

您应该将按钮放在更新面板中,或者像Tim Schmelter建议的那样定义一个显式触发器来在按钮单击事件时更新更新面板。