给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"%>
<script language="c#" runat="server">
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(); }
private void changepage(Object obj,DataGridPageChangedEventArgs e) { grid1.CurrentPageIndex=e.NewPageIndex;//当前页等于新的页面 DataLoad(); }
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(); } </script>
<form runat="server">
<asp:datagrid id="grid1" runat="server" alternatingitemstyle-backcolor="#feeeee" ItemStyle-BackColor="#CCCCCC" AutoGenerateColumns="false" headerstyle-backcolor="lightyellow" font-size="10pt" bordercolor="#999999"
allowpaging="true" pagesize=13 pagerstyle-mode=numericpages onpageindexchanged="changepage"
AllowSorting="True" onsortcommand="grid_sort" > <columns>
<asp:templatecolumn headertext="编号" SortExpression="id"> <itemtemplate> <span><%#DataBinder.Eval(Container.DataItem,"id")%></span> </itemtemplate> </asp:templatecolumn>
<asp:TemplateColumn HeaderText="用户名" SortExpression="username"> <ItemTemplate> <span><%#DataBinder.Eval(Container.DataItem,"username")%></span> </ItemTemplate> </asp:TemplateColumn>
<asp:templatecolumn headertext="电话" SortExpression="phone"> <itemtemplate> <span><%#DataBinder.Eval(Container.DataItem,"phone")%></span> </itemtemplate> </asp:templatecolumn>
<asp:templatecolumn headertext="ip地址" SortExpression="ip_address"> <itemtemplate> <span><%#DataBinder.Eval(Container.DataItem,"ip_address")%></span> </itemtemplate> </asp:templatecolumn>
</columns> </asp:datagrid> </form>
[Web开发]一个关于ASP运行时间计算的代码 [Web开发]ASP:检测含有中文字符串的实际长度 [Web开发]asp 中英文字符长度检测判断函数 [Web开发]安全维护 IIS asp 站点的高级技巧 [C语言系列]NET 中C#的switch语句的语法 [Access]ASP&SQL让select查询结果随机排序的实现方法 [Web开发]ASP字符串截取函数 [Web开发][asp]关键词只替换一次的写法 [Web开发]Asp无组件生成缩略图方法详解 [Web开发]asp编程中优化数据库方法详解
|