首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
capsicum29 (8)
qdzx2008 (51)
ShowLong (1)
cyp403 (16)
yjz0065 (114)
lphpc (31)
smallnest (63)
tellmenow (22)
cutemouse (22)
softj (78)
CSDN - 文档中心 - .NET 阅读:4804   评论: 1    参与评论
标题   给datagrid控件建立稳固的双向排序(asp.net)     选择自 ouyang76cn 的 Blog
关键字   asp.net,c#,.net.控件,datagrid
出处  

给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>


相关文章
对该文的评论
ouyang76cn ( 2003-01-18)
up