日期:2014-05-20  浏览次数:20403 次

再次散分,一个小小的趣题!进者有分!
一个SqlDataSource,它的select   insert   update   delete都设置好。
再放一个gridview
如果在设计状态把GridView通过智能标记设置数据源为:SqlDataSource1。在程序运行后,一切正常。可以进行以上四种操作。
但是,在设置状态不为GridView设置数据源,而在程序中设置:Page_Load中设置。
GridView1.   DataSource   =   SqlDataSource1;
GridView1.   DataBind();

那么。将不能更新数据。

请问是为什么?如果将绑定写在其它事件中,又如何每次刷新页面看到数据?

------解决方案--------------------
我已经找到答案了:

protected void Page_Init(object sender, EventArgs e)
{
this.GridView1.DataSourceID = "AccessDataSource1 ";
}

这里指定,但是不能用DataSource,因为这个时候还不能访问其他控件。
------解决方案--------------------
GridView1. DataSource = SqlDataSource1;
GridView1. DataBind();
这种写法根本就不是把GridView1绑定到SqlDataSource1,而仅仅是将SqlDataSource1进行了SELECT之后获得的数据绑定了,UPDATE/INSERT/DELETE方法根本没绑定。

正确的等效写法:
GridView1.DataSourceID = "SqlDataSource1 ";
// 不需要执行DataBind();

用ASP.NET 2.0,最好就用2.0的使用方式,不要再去用1.0手动提供DataSource再手动DataBind那套了。如果需要动态制订DataSource控件,就通过DataSourceID属性。