首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题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)    

积极原创作者 
tellmenow (22)
cutemouse (22)
softj (78)
iiprogram (69)
qdzx2008 (50)
goodboy1881 (14)
wangchinaking (58)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
CSDN - 文档中心 - .NET 阅读:10503   评论: 6    参与评论
标题   datagrid的正反双向排序     选择自 mikecat888 的 Blog
关键字   datagrid
出处  

  迈克老猫(MikeCat)

来自:老猫の理想

   呵呵,本没有写文章之意,看到好友阿好(hbzxf)的文章,也决定把平时的一些东西写出来和大家分享!有疏漏之处,敬请大家指教!

     在asp.net中利用datagrid控件按列进行排序很是方便。可是我们只能单项排序!如果我们需要正反排序那么就需要加入一些代码控制一下,下面我来详细讲解一下这个过程。

  首先我们需要将datagird控件的属性设置为 AllowSorting="True",且需要排序列需要制定排序表达式 eg: SortExpression="kmdm"。设置好这些,我们进入代码文件,来编写响应排序的事件.

  首先在Page_Load时间中加入如下代码:

   if (!IsPostBack)
   {
    if(this.kjkm_dg.Attributes["SortExpression"]==null) //这里kjkm_dg为datagrid   ID
    {
     this.kjkm_dg.Attributes["SortExpression"]="kmdm";  //这里给datagrid增加一个排序属性,且默认排序表达式为kmdm;
     kjkm_dg.Attributes["SortDirection"]="ASC"; //这里给datagrid增加一个排序方向属性,且默认为升序排列;
    }
    mikecatbind(); //绑定函数,下面介绍
   }

  protected void mikecatbind()
  {
   string sqlStr="select * from zc_kjkm";
   DataView dv=new DataView();
   
   string SortExpression=kjkm_dg.Attributes["SortExpression"];
   string SortDirection=kjkm_dg.Attributes["SortDirection"];
   dv=us.Bind(sqlStr).Tables[0].DefaultView;  //来自web service的dataset,这里随便一个ds就可以;
   dv.Sort=SortExpression+" "+SortDirection; //指定视图的排序方式;
   kjkm_dg.DataSource=dv; //指定数据源
   kjkm_dg.DataBind(); //数据绑定

}

   进行完上面的设置后我们进入重要的环节,排序事件的编写:

  private void kjkm_dg_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
  {
   string SortExpression=e.SortExpression.ToString();  //获得当前排序表达式
   string SortDirection="ASC"; //为排序方向变量赋初值
   if(SortExpression==kjkm_dg.Attributes["SortExpression"])  //如果为当前排序列
   {
    SortDirection=(kjkm_dg.Attributes["SortDirection"].ToString()==SortDirection?"DESC":"ASC");     //获得下一次的排序状态

 }
   kjkm_dg.Attributes["SortExpression"]=SortExpression;
   kjkm_dg.Attributes["SortDirection"]=SortDirection;
   mikecatbind();
  }

 

好了,试试看看是不是可以进行正倒序排列啦。


相关文章
对该文的评论
singlepine ( 2005-04-11)
//sort 事件
private void DataGrid1_SortCommand(object source, DataGridSortCommandEventArgs e)
{
string sort=string.Empty;
if(ViewState["SortExpression"].ToString()==e.SortExpression.ToString())
{
if(ViewState["sort"].ToString()=="asc")
{sort="desc";}
else{sort="asc";}
}
else
{
if(ViewState["sort"].ToString()=="asc")
{sort="desc";}
else
{sort="asc";}
}
ViewState["sort"]=sort;
ViewState["SortExpression"]=e.SortExpression;
DataView dv=new DataView(ds.Tables[0],null,e.SortExpression,DataViewRowState.CurrentRows);
DataGrid1.DataSource=dv;
DataGrid1.DataBind();
}
//load 中设置
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
ViewState["SortExpression"]="";
ViewState["sort"]="desc";
}
}
CSDN 网友 ( 2005-01-15)
是呀 用一个session就可以了 何必这么麻烦
CSDN 网友 ( 2004-12-02)
而起你可以用在所有的对话中
CSDN 网友 ( 2004-12-02)
不用那么复杂吧?用一个session保存上次的DIRECTION,然后下次判断并更改一下方向即可。
CSDN 网友 ( 2004-07-29)
分页时,好象有问题