給datagrid控制元件建立穩固的雙向排序(asp.net) (轉)

worldblog發表於2007-12-15
給datagrid控制元件建立穩固的雙向排序(asp.net) (轉)[@more@]

給datagrid建立穩固的雙向排序()

大家都知道DataGrid控制元件帶有內建的事件來對記錄進行排序,可單擊列標題,就會按照相應的列進行排序,使用

非常方便和簡單化.

但是它也有很大的不足,就是由datagrid的分頁功能,只能單向排序,而且換頁後,排序資訊就會丟失.所以我

們需要改進一下分頁的事件,利用狀態包ViewState變數,達到能穩固的雙向排序。:)


(1)首先在頁面load時.要讀取資料來源裡的資料,並將其送入到DataGrid

private void page_load( obj,EventArgs e)
{
  if(!Page.IsPostBack)
  {
  DataLoad();
  }
}

private void DataLoad()
{
  string connstr=ConfigurationSettings.AppSettings["ConnectionString"];
  OleConnection conn=new  OleDbConnection(connstr);
  DataSet ds=new DataSet();

  string ;

if(ViewState["sorting"]==null)
  {
  sql=" * 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.Data=dv;
  grid1.DataBind();
}

(2)然後在datagrid控制元件的屬性設定中加入如下選項;

...
allowpaging="true"
pagesize=13
pagerstyle-mode=numericpages
onpageindd="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=""%>
< namespace="System.Data"%>
< namespace="System.Data.OleDb"%>

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();
}

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



 


 

 



 



 





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993823/,如需轉載,請註明出處,否則將追究法律責任。

相關文章