Asp.Net异步数据绑定
前台aspx页面:
<%@ Page Language="C#" Async="true" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
后台cs文件:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
// 异步数据绑定
public partial class _Default : System.Web.UI.Page
{
private SqlConnection _connection;
private SqlCommand _command;
private SqlDataReader _reader;
bool isBind = false;
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
this.PreRenderComplete += new EventHandler(_Default_PreRenderComplete);
//this.PreRenderComplete += new EventHandler(Page_PreRenderComplete);
AddOnPreRenderCompleteAsync(
new BeginEventHandler(BeginAsyncOperation),
new EndEventHandler(EndAsyncOperation)
);
}
}
void _Default_PreRenderComplete(object sender, EventArgs e)
{
if (isBind == false)
{
Output.DataSource = _reader;
Output.DataBind();
isBind = true;
}
//throw new Exception("The method or operation is not implemented.");
}
IAsyncResult BeginAsyncOperation(object sender, EventArgs e, AsyncCallback cb, object state)
{
string connection = ConfigurationManager.ConnectionStrings["PubsConnectionString"].ConnectionString.ToString();
_connection = new SqlConnection(connection);
_connection.Open();
_command = new SqlCommand("select * from titles", _connection);
return _command.BeginExecuteReader(cb, state);
}
public void EndAsyncOperation(IAsyncResult ar)
{
_reader = _command.EndExecuteReader(ar);
}
public void Page_PreRenderComplete(object sender, EventArgs e)
{
//throw new Exception("The method or operation is not implemented.");
if (isBind == false)
{
Output.DataSource = _reader;
Output.DataBind();
isBind = true;
}
}
public override void Dispose()
{
if (_connection != null)
_connection.Close();
base.Dispose();
}
protected void Output_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Label lblID = (Label)e.Row.FindControl("lblID");
lblID.Text = DataBinder.Eval(e.Row.DataItem, "title_id").ToString() ;
}
}
}
WebConfig配置
<connectionStrings>
<add name="PubsConnectionString" connectionString="server=localhost;database=pubs;u providerName="System.Data.SqlClient"/>
实现一个GridView简单的异步数据绑定操作。