3

我是 ASP.Net 的新手,我对 GridView 控件在 UpdatePanel 中的工作方式感到困惑。

我已阅读此处的文档,其中指出“默认情况下,UpdatePanel 控件中的任何回发控件都会导致异步回发并刷新面板的内容。” 然而,当我在元素内放置一个 GridView 和一个 Button 控件时,除非该按钮具有定义的 OnClick 事件来执行 grid1.DataBind();,否则网格将不会刷新其数据。此外,我尝试在 UpdatePanel 上为 Button 指定 AsyncPostBackTrigger,但我再次得到了相同的行为。现在,我注意到当我按下没有 OnClick 事件的按钮时 UpdatePanel 会刷新,但是其中的 GridView 不会。请问您能对此有所了解吗?我必须总是调用后面的代码来显式刷新它吗?

我在 Web.Config 中的连接字符串

    <connectionStrings>
        <add name="myConnectionString"
             connectionString="Data Source=XXXXX;Initial Catalog=XXXX;Persist Security Info=True;User ID=XXXXX;Password=XXXXX"
             providerName="System.Data.SqlClient" />
    </connectionStrings>

我的默认.aspx

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="EmptyWebApp.Default" %>
 <!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server"> <title></title> </head>
 <body>
     <form id="form1" runat="server">
         <div>
             <asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="true" />
             <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                 <ContentTemplate>
                     <asp:GridView ID="grid1" runat="server" DataSourceID="SQLDevelopment" AutoGenerateColumns="False">
                         <Columns>
                             <asp:BoundField DataField="UserID" HeaderText="UserID" SortExpression="UserID" />
                             <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
                         </Columns>
                     </asp:GridView>
                     <asp:SqlDataSource ID="SQLDevelopment" runat="server"
                    ConnectionString="<%$ ConnectionStrings:myConnectionString %>" 
                    SelectCommand="SELECT * FROM [TestTableA]"></asp:SqlDataSource>
                <%=DateTime.Now.ToString()%> <br />
                <asp:Button ID="btnRefresh" runat="server" Text="Refresh without C# event"/>
                <asp:Button ID="btnRefresh1" runat="server" Text="Refresh with C# event" OnClick="btnRefresh1_Click"/>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
 </form></body><html>

我的 btnRefresh1 代码

    protected void btnRefresh1_Click(object sender, EventArgs e)
    {
        grid1.DataBind();
    }

谢谢你

4

3 回答 3

3

更新面板代码没有任何问题 - 问题是网格视图不会在回发时再次从数据源请求数据。相反,它将使用视图状态来加载相应的数据。

但是,调用DataBind将强制网格视图再次从数据源获取数据,从而刷新它(或者您可以尝试禁用网格视图的视图状态) - 请参阅该方法的文档- 示例代码中的注释也是如此。

如果您不想DataBind在刷新按钮中添加调用,您可以在其中执行相同操作Page_Load- 从而在每次回发时刷新网格(无论导致它的控件)。

于 2012-11-30T11:28:47.193 回答
0

在您的gridview 脚本中使用.DataBind()(即gridview1.DataBind();)。这只是将数据重新绑定到已在数据源中设置的网格视图。

<asp:GridView ID="grid1" runat="server" DataSourceID="SQLDevelopment" AutoGenerateColumns="False">

有关详细信息,请参阅MSDN

于 2013-09-17T17:13:02.847 回答
0

或者让 ScriptManager 在一行代码中为您完成所有工作!

ScriptManager.GetCurrent(this).RegisterPostBackControl(ButtonSubmit);

将 ButtonSubmit 替换为您自己的控件。

于 2016-03-06T01:07:57.453 回答