我是ASP.Net的新手,我对GridView控件在UpdatePanel中的工作方式感到困惑。
我已阅读文档here,其中指出“默认情况下,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>
我的Default.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();
}
谢谢你
答案 0 :(得分:3)
更新面板代码没有任何问题 - 问题是网格视图不会在回发后再次从数据源请求数据。相反,它将使用视图状态来加载相应的数据。
但是,调用DataBind
会强制网格视图再次从数据源获取数据,从而刷新它(或者您可以尝试禁用网格视图的视图状态) - 请参阅documentation方法 - 示例代码中的注释说明相同。
如果您不想在刷新按钮中添加DataBind
调用,您可以在Page_Load
中执行相同的操作 - 从而在每次回发时刷新网格(无论是否导致控制它)。
答案 1 :(得分:0)
在gridview的脚本中使用.DataBind()(即gridview1.DataBind();)。这只是将数据重新绑定到已在数据源中设置的gridview。
<asp:GridView ID="grid1" runat="server" DataSourceID="SQLDevelopment" AutoGenerateColumns="False">
有关详细信息,请参阅MSDN。
答案 2 :(得分:0)
或允许ScriptManager在一行代码中为您完成所有操作!
ScriptManager.GetCurrent(this).RegisterPostBackControl(ButtonSubmit);
用您自己的控件替换ButtonSubmit。