私はASP.Netを初めて使用し、UpdatePanel内でGridViewコントロールがどのように機能するかについて混乱しています。
「デフォルトでは、UpdatePanelコントロール内のポストバックコントロールは非同期のポストバックを引き起こし、パネルのコンテンツを更新します」というドキュメントをここで読みました。それでも、GridViewとButtonコントロールを要素内に配置すると、ボタンにgrid1.DataBind();を実行するための定義済みのOnClickイベントがない限り、グリッドはデータを更新しません。また、ボタンのUpdatePanelでAsyncPostBackTriggerを指定してみましたが、同じ動作が得られました。ここで、OnClickイベントなしでButtonを押すと、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();
}
ありがとうございました