给datagrid控件建立稳固的双向排序(asp.net)
点击次数:23 次 发布日期:2008-11-26 11:15:28 作者:源代码网
|
源代码网推荐 源代码网推荐 大家都知道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> 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
