給datagrid控件建立穩固的雙向排序(asp.net)
大家都知道datagrid控件帶有內置的事件來對記錄進行排序,用戶可單擊列標題,就會按照相應的列進行排序,使用
非常方便和簡單化.
但是它也有很大的不足,就是由datagrid代理的分頁功能,只能單向排序,而且換頁后,排序信息就會丟失.所以我
們需要改進一下分頁的事件函數,利用狀態包viewstate變量,達到能穩固的雙向排序。:)
(1)首先在頁面load時.要讀取數據源里的數據,并將其送入到datagrid
private void page_load(object obj,eventargs e)
{
if(!page.ispostback)
{
dataload();
}
}
private void dataload()
{
string connstr=configurationsettings.appsettings["connectionstring"];
oledbconnection conn=new oledbconnection(connstr);
dataset ds=new dataset();
string sql;
if(viewstate["sorting"]==null)
{
sql="select * from userinfo";
response.write(sql);
}
else
{
sql="select * from userinfo order by "+viewstate["sorting"].tostring()+" 
"+viewstate["sortdirection"].tostring();
response.write(sql);
}
oledbdataadapter da=new oledbdataadapter(sql,conn);
da.fill(ds);
dataview dv=new dataview(ds.tables[0]);
grid1.datasource=dv;
grid1.databind();
}
(2)然后在datagrid控件的屬性設定中加入如下選項;
...
allowpaging="true"
pagesize=13
pagerstyle-mode=numericpages
onpageindexchanged="changepage"
...
其中allowpaging="true",表示將啟用分頁功能,每頁的大小,我們設定小一些(pagesize=13),好讓它多分頁.
pagerstyle-mode=numericpages是將分頁模式設為數字,最后指定了事件的處理程序為changepage方法.
private void changepage(object obj,datagridpagechangedeventargs e)
{
grid1.currentpageindex=e.newpageindex;//當前頁等于新的頁面
dataload();
}
(3)最后是排序的事件函數:
private void grid_sort(object obj,datagridsortcommandeventargs e)
{
viewstate.add("sorting",e.sortexpression);
if (viewstate["sortdirection"]==null)
viewstate.add("sortdirection","asc");
else
{
if(viewstate["sortdirection"].tostring()=="asc")
viewstate["sortdirection"]="desc";
else
viewstate["sortdirection"]="asc";
}
dataload();
}
新聞熱點
疑難解答
圖片精選