MS WEB异步页示例疑问???

在MSDN看了MS的ASP.NET 2.0 中的异步页文章,其中试了一下运行效果。发觉其根本没有达到界面效果(异步功能是实现了).

http://www.microsoft.com/china/msdn/library/webservices/asp.net/issuesWickedCodetoc.mspx

数据访问代码如下.

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Configuration;

public partial class AsyncDataBind : System.Web.UI.Page
{
    private SqlConnection _connection;
    private SqlCommand _command;
    private SqlDataReader _reader;


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // Hook PreRenderComplete event for data binding
            this.PreRenderComplete += new EventHandler(Page_PreRenderComplete);
            AddOnPreRenderCompleteAsync(new BeginEventHandler(BeginAsyncOperation), new EndEventHandler(EndAsyncOperation)
            );
        }
    }
    IAsyncResult BeginAsyncOperation (object sender, EventArgs e,         AsyncCallback cb, object state)
    {
        string connect = WebConfigurationManager.ConnectionStrings         ["PubsConnectionString"].ConnectionString;
        
       _connection = new SqlConnection(connect);
        _connection.Open();
        _command = new SqlCommand("SELECT title_id, title, price FROM titles", _connection);
        
        return _command.BeginExecuteReader (cb, state);
    }

    void EndAsyncOperation(IAsyncResult ar)
    {
        _reader = _command.EndExecuteReader(ar);
    }

   
 
 
 
 
    public override void Dispose()
    {
        if (_connection != null) _connection.Close();
        base.Dispose();
    }
}

原理不讲了,看MS的帮助就行了。讲一下问题,上面红色的一段在运行时会调用二次。就是因为此二次调用,造成界面数据无法显示:因为_reader中的数据在第一次调用时已全部读取了。指针到最后,第二次调用就会为null.

不明白的就是Page_PreRenderComplete 为什么会调用二次。没办法,只好变通一下。用一个标记来判断是否要进行绑定.代码改成如下就可以正常显示:

bool _isread = false;
protected void Page_PreRenderComplete(object sender, EventArgs e)
{
if(_isread==false)
{
this.GridView1.DataSource = _reader;
GridView1.DataBind();
_isread = true;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值