关闭

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

855人阅读 评论(0) 收藏 举报

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

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

让Asp.NET的DataGrid可排序、可选择、可分页

让Asp.NET的DataGrid可排序、可选择、可分页 DataGrid是Asp.NET中的一个重要的控件,经常我们都将DataGrid做成可分页的和可排序的,有时还需要加上选择功能。这些都是经常...
  • u014440209
  • u014440209
  • 2014-05-09 20:06
  • 847

VC DataGrid控件使用总结

MS CDataGrid控件用法详解 本文示例源代码或素材下载 。DataGrid控件是VC方便地用来显示数据的一个极好的网格控件,我不否认网上还有期它不少优秀的网格控件,但我总喜欢使用微...
  • bcbobo21cn
  • bcbobo21cn
  • 2016-04-01 18:37
  • 1685

repeater 控件实现排序

对于呈现数据库信息的页面表格,我们可以通过repeat、gridview、datalist这三者控件,三者各有优缺点: repeat控件:呈现速度最快、效率最高、功能最简单。 gridview控件...
  • jielizhao
  • jielizhao
  • 2015-01-07 18:08
  • 715

链表的基本操作,建立,测长,删除,打印,插入

老早就想自己写写链表的基本操作的实现, 写写来练练手。#include #include #include using namespace std; typedef struct Node{ in...
  • zwguo982008
  • zwguo982008
  • 2015-10-17 22:58
  • 307

Asp.net中,点击GridView表头实现数据的排序

一、实现该功能的基本工作。 1、  先添加一个GridView,取名为gvData。 2、  设置该控件的属性: 操作步骤如下。 设置属性:    ...
  • hxj135812
  • hxj135812
  • 2014-03-10 10:57
  • 7177

ASP.NET中Web DataGrid的使用指南(转自前沿设计网-找到这个真不容易啊!)

关键词:ASP.NET中Web DataGrid的使用指南 很久以前就想写一些关于DataGrid/DataList的东西,但是一直以来,一方面自感所学未深,另一方面,总觉无从下笔,一拖再拖,离刚开...
  • luqingshuai_eloong
  • luqingshuai_eloong
  • 2015-06-16 17:31
  • 785

easyui datagrid本地分页排序

html代码 加载数据 js代码 var listData = []; $(function(){ $('#dg').datagr
  • lnkToKing
  • lnkToKing
  • 2016-11-18 10:45
  • 1674

DataGrid控件用法详解

转自:http://www.vckbase.com/document/viewdoc/?id=1164 作者:万建华 下载源代码 写在前面   刚写这个题目,就觉得肩上...
  • banrixianxin
  • banrixianxin
  • 2014-05-16 00:23
  • 4223

ASP.NET大数据量分页技术的初步体验技巧

可以借助于GridView与AspNetPager(强大的开源分页控件)实现ASP.NET获取数据表格时的分页。 GridView分页功能较弱,分页切换速度不如AspNetPager。 两者可单独使用...
  • freeWayWalker
  • freeWayWalker
  • 2013-07-28 18:11
  • 1737

datagrid自定义分页控件

<asp:DataGrid ID="Datagrid1" runat="server" CssClass="GridView" BorderWidth="1px" AccessKey="1" ...
  • qq_31971935
  • qq_31971935
  • 2016-08-10 17:32
  • 489
    个人资料
    • 访问:15810次
    • 积分:288
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    文章存档