转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
给datagrid控件建立稳固的双向排序(asp.net)         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:571 更新时间:2009/4/23 10:50:19

给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编程中优化数据库方法详解
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台