动态绑定ASPxGridView或ASPxTreeList数据源的刷新问题
ASPxGridView或ASPxTreeList在官方Demo中都是利用数据源控件绑定的数据源,这样基本上就可以确定了一个ASPxGridView只能固定的显示一些数据,然而在实际应用中经常有这样的需求,一些表结构类似的数据源想在一个页面展示,根据用户选择来呈现。
例如根据ComboBox的item来选择数据源时,如果把数据源绑定事件写在SelectIndexChanged事件里面,用户点击ComboBox选择不同item会先执行Page_Load事件,然后执行SelectIndexChanged事件,将会显示数据,然后用户点击ASPxGridView内的按钮比如排序、下一页等时,将会只执行Page_Load事件,而Page_Load事件里面没有绑定ASPxGridView,将会导致ASPxGridView没有数据显示。这是一个比较矛盾的事情,如果绑定事件不在Page_Load里面将会导致点击按钮没有数据,如果放在page_load里面将会使用户选择失效。
当然,还有一个事件是比较可行的,ASPxGridView1_AfterPerformCallback,在页面回发的时候执行。也就是说在点击ASPxGridView上的按钮后先执行Page_Load事件,然后执行ASPxGridView1_AfterPerformCallback事件,绑定在这个事件里执行,可以保证用户的操作有效。
这时还存在一个问题,就是DataTable的值怎么保存。执行SelectIndexChanged
事件时并不能(也许是我不知道)给
AfterPerformCallback传参数,而且ASPxGridView回发的时候并不执行SelectIndexChanged事件,这样DataTable的值就无法更新到ASPxGridView
的DataSous中。
考虑用ViewState来进行这个操作。ViewState可以用来保存页面控件的状态。对于一个页面来说,相当于静态的一个变量。而且不需要声明。 详细见代码: 页面上有这么两个控件
OnSelectedIndexChanged=\ SelectedIndex=\ ValueType=\
SelectionChanged=\ />
protected void ASPxComboBox1_SelectedIndexChanged(object
sender, EventArgs e) {
string Comb_Value =
ASPxComboBox1.SelectedItem.Value.ToString(); string Sql_Str = string.Empty; DataTable Dt=new DataTable(); switch (Comb_Value) {
case \: Sql_Str =\c.jl_id as id, c.bj_dj as sz from bj_sj \; break;
case \: Sql_Str = \c.jl_id as id, c.bj_dj as sz from bj_sj \; break; }
Dt = DBHelper.GetDataSet(Sql_Str); if (ViewState[\] != null) {
ASPxGridView1.DataSource = (DataTable)ViewState[\]; } else
{
ASPxGridView1.DataSource = Dt;
ViewState[\] = ASPxGridView1.DataSource; }
ASPxGridView1.DataBind();
}
protected void ASPxGridView1_AfterPerformCallback(object sender, ASPxGridViewAfterPerformCallbackEventArgs e) {
ASPxGridView1.DataSource = (DataTable)ViewState[\]; ASPxGridView1.DataBind(); }
这个问题就可以比较完美的解决了。 感谢
道ViewState为何物。
,是他提醒我可以用ViewState,在此之前我还不知
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库ASPxGridView(或ASPxTreeList)动态加载数据源的问题在线全文阅读。
相关推荐: