给datagrid控件建立稳固的双向排序(asp.net)

给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();
}

整个完整程序为:

< %@page language="C#"%>
< %@import namespace="System.Data"%>
< %@import namespace="System.Data.OleDb"%>

 1<script language="c#" runat="server">
 2
 3private void page_load(Object obj,EventArgs e)   
 4{   
 5if(!Page.IsPostBack)   
 6{   
 7DataLoad();   
 8}   
 9} 
10
11private void DataLoad()   
12{   
13string connstr=ConfigurationSettings.AppSettings["ConnectionString"];   
14OleDbConnection conn=new OleDbConnection(connstr);   
15DataSet ds=new DataSet(); 
16
17string sql; 
18
19if(ViewState["sorting"]==null)   
20{   
21sql="select * from userinfo";   
22Response.Write(sql);   
23}   
24else   
25{   
26sql="select * from userinfo order by "+ViewState["sorting"].ToString()+" 
27
28"+ViewState["sortdirection"].ToString();   
29Response.Write(sql);   
30} 
31
32OleDbDataAdapter da=new OleDbDataAdapter(sql,conn);   
33da.Fill(ds);   
34DataView dv=new DataView(ds.Tables[0]);   
35grid1.DataSource=dv;   
36grid1.DataBind();   
37} 
38
39  
40private void changepage(Object obj,DataGridPageChangedEventArgs e)   
41{   
42grid1.CurrentPageIndex=e.NewPageIndex;//当前页等于新的页面   
43DataLoad();   
44} 
45
46  
47private void grid_sort(Object obj,DataGridSortCommandEventArgs e)   
48{   
49ViewState.Add("sorting",e.SortExpression);   
50if (ViewState["sortdirection"]==null)   
51ViewState.Add("sortdirection","ASC");   
52else   
53{   
54if(ViewState["sortdirection"].ToString()=="ASC")   
55ViewState["sortdirection"]="DESC";   
56else   
57ViewState["sortdirection"]="ASC";   
58}   
59DataLoad();   
60}   
61</script>
 1<form runat="server">
 2<asp:datagrid allowpaging="true" allowsorting="True" alternatingitemstyle-backcolor="#feeeee" autogeneratecolumns="false" bordercolor="#999999" font-size="10pt" headerstyle-backcolor="lightyellow" id="grid1" itemstyle-backcolor="#CCCCCC" onpageindexchanged="changepage" onsortcommand="grid_sort" pagerstyle-mode="numericpages" pagesize="13" runat="server">
 3<columns>
 4<asp:templatecolumn headertext="编号" sortexpression="id">
 5<itemtemplate>
 6<span>```
 7#DataBinder.Eval(Container.DataItem,"id")
 8```</span>
 9</itemtemplate>
10</asp:templatecolumn>
11<asp:templatecolumn headertext="用户名" sortexpression="username">
12<itemtemplate>
13<span>```
14#DataBinder.Eval(Container.DataItem,"username")
15```</span>
16</itemtemplate>
17</asp:templatecolumn>
18<asp:templatecolumn headertext="电话" sortexpression="phone">
19<itemtemplate>
20<span>```
21#DataBinder.Eval(Container.DataItem,"phone")
22```</span>
23</itemtemplate>
24</asp:templatecolumn>
25<asp:templatecolumn headertext="ip地址" sortexpression="ip_address">
26<itemtemplate>
27<span>```
28#DataBinder.Eval(Container.DataItem,"ip_address")
29```</span>
30</itemtemplate>
31</asp:templatecolumn>
32</columns>
33</asp:datagrid>
34</form>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus