2

我正在使用使用数据源和数据绑定的 Gridview。当我重新加载页面时,gridview 会更新,但我希望它在 buttonclick 上,但它对我不起作用。

更新面板内的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();
    }

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

4

3 回答 3

9

由于我没有看到按钮btnWall,我认为它在UpdatePanel. 但是,如果要允许 an 之外的控件UpdatePanel触发回发,则需要定义显式触发器。

因此,您可以使用AsyncPostBackTrigger

<asp:UpdatePanel ID="upWall" runat="server" ChildrenAsTriggers="true" UpdateMode="conditional">
     <ContentTemplate>
         ....
     </ContentTemplate>
     <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnWall" EventName="Click" />
     </Triggers>
 </asp:UpdatePanel>
于 2013-01-10T12:41:26.053 回答
1

默认情况下,部分页面更新在更新面板中启用,因为 ScriptManager 控件的 EnablePartialRendering 属性的默认值为 true。将按钮放在更新面板中就足以满足您的需求,因为按钮充当异步面板内的回发控件。然后在更新后添加此行(gvWallospts.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();


}

确保页面加载中的绑定代码也被此夹在中间

 If(!IsPostBack)
     {
                   }
于 2013-01-10T13:18:02.650 回答
0

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

于 2013-01-10T12:54:01.350 回答