一个包含GridView的用户控件,该用户控件根据外界传递的SQL语句读取Datatable,并绑定到GridView.没有使用数据源控件,都是使用dataSource=table的方式绑定.
假定用户控件名为:GridViewUserControl一般是这样写的
Page_Load()
{
  if (!IsPostBack)
  { 
      BindingData();//该方法用来绑定数据..
  }
}
GridView1_Sorting()
{
....获取排序的关键字,略过
BindingData();
}
也就是说在一次请求时在Page_Load事件中绑定,对于后续的事件(排序或分页等),在触发的事件中绑定.但是,如果引与回发的并不是该控件(或该用户控件)本身(也就是说并不是由于排序或分页引起回发),而是页面上的其他控件或用户控件引起的,就比较麻烦了如果不做其他处理,BindingData方法不会被调用.并且其他控件的事件多数对GridViewUserControl的数据源没什么影响, 我曾考虑可以有这样几种方法来实现绑定.1.在其他的控件(或是用户控件,下同)事件中调用GridViewUserControl的方法来绑定(如果页面上的其他控件比较多,这样比较麻烦,且很多时候其他的用户控件只应该干自己的活,不应该管其他控件);2.在其他控件的事件中再触发事件,该事件由主页面进行捕获并调用GridViewUserControl的方法绑定(缺点:页面上的控件比较多,每个控件的事件也不少,都触发并捕获也很麻烦)3.在OnPreRender()事件中进行判断,如果这前没有绑定过则在这里绑定.(不知为什么,我在该事件中ViewState("somename")中的数据总是为NULL,而我在绑定时也是需要使用ViewState的.)4.如果Page_Load中去掉if (!IsPostBack)的判断,那么在自有事件触发时就有可能绑定两次.不知道我说明白没有,也许有很简单的方法我没发现,也许有更巧妙的方法.请各位帮忙.