Asp.Net GridView點擊標題排序方法
2008-04-01 21:56
393 查看
今天需要用到在GridView中點擊標題排序,琢磨了半天,終於成功了。在看代碼之前需要說明一點:
GridView本身有一个Sort()函数:public virtual void Sort ( string sortExpression, SortDirection sortDirection)使用上相当方便。但在实际使用中,常用的是点击每一列的标题来排序,点击标题会触发:protected void GridView_Sorting(object sender, GridViewSortEventArgs e)事件。从GridViewSortEventArgs中可以拿到SortDirection和SortExpression。但是GridView.Sort()本身也会触发GridView_Sorting(),如果在GridView_Sorting()中调用GridView.Sort()会无限的循环,直到堆栈溢出。這里使用DataView.Sort属性来排序,(Sort方法會觸發Sorting 事件),再重新綁定到GridView上。
代碼如下:
1、在源碼中給GridView中加入AllowSorting屬性
//1、在源碼的GridView中加入AllowSorting="true"
<asp:GridView ID="gvData" runat="server" AllowSorting="true">
</asp:GridView>
2、 ClbComunication.clsComunication類中定義了一個屬性,用於暫存從數據庫得到的資料:
注:定義此屬性是因為頁面顯示后,剛才得的資料表(mdatatable)的資料會被清空。所以將得到的資料暫存於類中,便於調用。
/// <summary>
/// 存放資料DataView屬性的變量
/// </summary>
private static DataView dvValue = new DataView();
/// <summary>
/// 存放資料DataView屬性
/// </summary>
public static DataView dv
{
get { return dvValue; }
set { dvValue = value; }
}
3、將資料放入類的DataView屬性中保存
//得到資料(BOFactory.bofactory.GetOracleDataTable(mSQL_Selection)為從數據庫得到資料)
DataTable mdatatable = BOFactory.bofactory.GetOracleDataTable(mSQL_Selection);
//將需要排序的資料放入DataView中(主要用到此句)
ClbComunication.clsComunication.dv = new DataView(mdatatable);
//資料與界面上的GridView綁定
gvData.DataBind();
4、訂閱GridView的Sorting事件
//GridView的Sorting事件
gvData.Sorting += new GridViewSortEventHandler(gvData_Sorting);
5、編輯GridView的Sorting事件方法,其中用到的GridViewSortDirection屬性的定義如"6"所示
/// <summary>
/// GridView的Sorting事件方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void gvData_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression.ToUpper();
if (GridViewSortDirection ==SortDirection.Ascending)
{
GridViewSortDirection = SortDirection.Descending;
//排序並重新綁定
bindData(sortExpression, "DESC");
}
else if (GridViewSortDirection == SortDirection.Descending)
{
GridViewSortDirection = SortDirection.Ascending;
//排序並重新綁定
bindData(sortExpression, "ASC");
}
}
6、定義排序方向屬性,此属性用viewstate保存每次排序的方向:
/// <summary>
/// 排序方向屬性
/// </summary>
public SortDirection GridViewSortDirection
{
get
{
if (ViewState["sortDirection"] == null)
ViewState["sortDirection"] = SortDirection.Ascending;
return (SortDirection)ViewState["sortDirection"];
}
set
{
ViewState["sortDirection"] = value;
}
}
7、排序並綁定數據
/// <summary>
/// 排序並綁定數據
/// </summary>
/// <param name="sortExpression"></param>
/// <param name="sortDirection"></param>
protected void bindData(string sortExpression, string sortDirection)
{
ClbComunication.clsComunication.dv.Sort = sortExpression;
if (sortDirection != String.Empty)
{
ClbComunication.clsComunication.dv.Sort = sortExpression+" " + sortDirection;
}
gvData.DataSource = ClbComunication.clsComunication.dv;
gvData.DataBind();
}
其它參考:
http://www.cnblogs.com/jackyrong/archive/2006/05/26/409788.html http://stlh.blogspot.com/2008/02/gridview-sort.html
GridView本身有一个Sort()函数:public virtual void Sort ( string sortExpression, SortDirection sortDirection)使用上相当方便。但在实际使用中,常用的是点击每一列的标题来排序,点击标题会触发:protected void GridView_Sorting(object sender, GridViewSortEventArgs e)事件。从GridViewSortEventArgs中可以拿到SortDirection和SortExpression。但是GridView.Sort()本身也会触发GridView_Sorting(),如果在GridView_Sorting()中调用GridView.Sort()会无限的循环,直到堆栈溢出。這里使用DataView.Sort属性来排序,(Sort方法會觸發Sorting 事件),再重新綁定到GridView上。
代碼如下:
1、在源碼中給GridView中加入AllowSorting屬性
//1、在源碼的GridView中加入AllowSorting="true"
<asp:GridView ID="gvData" runat="server" AllowSorting="true">
</asp:GridView>
2、 ClbComunication.clsComunication類中定義了一個屬性,用於暫存從數據庫得到的資料:
注:定義此屬性是因為頁面顯示后,剛才得的資料表(mdatatable)的資料會被清空。所以將得到的資料暫存於類中,便於調用。
/// <summary>
/// 存放資料DataView屬性的變量
/// </summary>
private static DataView dvValue = new DataView();
/// <summary>
/// 存放資料DataView屬性
/// </summary>
public static DataView dv
{
get { return dvValue; }
set { dvValue = value; }
}
3、將資料放入類的DataView屬性中保存
//得到資料(BOFactory.bofactory.GetOracleDataTable(mSQL_Selection)為從數據庫得到資料)
DataTable mdatatable = BOFactory.bofactory.GetOracleDataTable(mSQL_Selection);
//將需要排序的資料放入DataView中(主要用到此句)
ClbComunication.clsComunication.dv = new DataView(mdatatable);
//資料與界面上的GridView綁定
gvData.DataBind();
4、訂閱GridView的Sorting事件
//GridView的Sorting事件
gvData.Sorting += new GridViewSortEventHandler(gvData_Sorting);
5、編輯GridView的Sorting事件方法,其中用到的GridViewSortDirection屬性的定義如"6"所示
/// <summary>
/// GridView的Sorting事件方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void gvData_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression.ToUpper();
if (GridViewSortDirection ==SortDirection.Ascending)
{
GridViewSortDirection = SortDirection.Descending;
//排序並重新綁定
bindData(sortExpression, "DESC");
}
else if (GridViewSortDirection == SortDirection.Descending)
{
GridViewSortDirection = SortDirection.Ascending;
//排序並重新綁定
bindData(sortExpression, "ASC");
}
}
6、定義排序方向屬性,此属性用viewstate保存每次排序的方向:
/// <summary>
/// 排序方向屬性
/// </summary>
public SortDirection GridViewSortDirection
{
get
{
if (ViewState["sortDirection"] == null)
ViewState["sortDirection"] = SortDirection.Ascending;
return (SortDirection)ViewState["sortDirection"];
}
set
{
ViewState["sortDirection"] = value;
}
}
7、排序並綁定數據
/// <summary>
/// 排序並綁定數據
/// </summary>
/// <param name="sortExpression"></param>
/// <param name="sortDirection"></param>
protected void bindData(string sortExpression, string sortDirection)
{
ClbComunication.clsComunication.dv.Sort = sortExpression;
if (sortDirection != String.Empty)
{
ClbComunication.clsComunication.dv.Sort = sortExpression+" " + sortDirection;
}
gvData.DataSource = ClbComunication.clsComunication.dv;
gvData.DataBind();
}
其它參考:
http://www.cnblogs.com/jackyrong/archive/2006/05/26/409788.html http://stlh.blogspot.com/2008/02/gridview-sort.html
相关文章推荐
- Asp.Net GridView點擊標題排序方法
- ASP.net中Gridview修改表头后没有排序功能的解决方法
- Asp.Net GridView点击列标题排序方法
- Asp.net技巧:gridview获取当前行索引的方法
- -[Up,every,day] 之 №1_ ASP.NET GridView读取隐藏列的两种方法
- asp.net中gridview导出excel方法以及怎样修改导出的日期格式
- Asp.net 中 GridView 在 RowDataBound事件中获取 某列值 的方法
- ASP.NET-Gridview中动态数据源的排序问题
- 功能齐全的GridView!Asp.Net中GridView的自定义分页,带箭头的排序,鼠标高亮每一行,无数据时的提醒,点击Button弹出框!
- asp.net(C#)读取文件夹和子文件夹下所有文件,绑定到GRIDVIEW并排序
- [Asp.NET]GridView点击列排序
- ASP.NET开发之GridView使用方法
- ASP.NET Gridview 中使用checkbox删除的2种方法实例分享
- 灵活掌握Asp.net MVC中GridView的使用方法
- asp.net后台对sql语句排序,筛选,gridview隐藏过长的字符串鼠标放上去显示全部,dropdownlist在前台显示拼接字符串
- asp.net如何得到GRIDVIEW中某行某列值的方法
- asp.net GridView排序简单实现
- asp.net中gridview 如果字数太多可以用此方法把字体变短+.....
- ASP.NET中GridView控件删除数据的两种方法
- asp.net gridview列宽固定的几种方法