在VS.net 2005中,提供了GridView控件,据说功能比DataGrid要强大很多,我没有用过DataGrid,所以关于效能、优劣的问题,本文不做探讨。
本文主要实现GridView使用DataSource绑定数据时,点击表格列标题即能排序,而且对于有条件查询的数据也可以进行排序。
1、实现排序的主要代码(网上收集):
private void databind(){
.....(获取DataSet省略)
DataView dv = ods.Tables[0].DefaultView;//ods修改为你自己的DataSet
ViewState["dt"]=ods.Tables[0]; //重要!
GridView1.DataSource = dv;
GridView1.DataBind();
}
//添加两个属性 排序方向、排序字段
private string GridViewSortDirection
{
get { return ViewState["SortDirection"] as string ?? "ASC"; }
set { ViewState["SortDirection"] = value; }
}
private string GridViewSortExpression
{
get { return ViewState["SortExpression"] as string ?? string.Empty; }
set { ViewState["SortExpression"] = value; }
}
//获取点击后的排序方向
private string GetSortDirection()
{
switch (GridViewSortDirection)
{
case "ASC":
GridViewSortDirection = "DESC";
break;
case "DESC":
GridViewSortDirection = "ASC";
break;
}
return GridViewSortDirection;
}
protected DataView SortDataTable(System.Data.DataTable dataTable, bool isPageIndexChanging)
{
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
if (GridViewSortExpression != string.Empty)
{
//根据是否PageIndexChanging设置排序方向
if (isPageIndexChanging)
{
dataView.Sort = string.Format("{0} {1}", GridViewSortExpression, GridViewSortDirection);
}
else
{
dataView.Sort = string.Format("{0} {1}", GridViewSortExpression, GetSortDirection());
}
}
return dataView;
}
else
{
return new DataView();
}
}
//绑定
protected void GridView1_Sorting1(object sender, GridViewSortEventArgs e)
{
GridViewSortExpression = e.SortExpression;
int pageIndex = GridView1.PageIndex;
sortdatabinds(pageIndex, false);
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
int pageIndex = e.NewPageIndex;
sortdatabinds(pageIndex, true);
}
private void sortdatabinds(int pageIndex, bool getsort)
{
DataTable dt = (DataTable)ViewState["dt"];
GridView1.PageIndex = pageIndex;
GridView1.DataSource = SortDataTable(dt as DataTable, getsort);
GridView1.DataBind();
ControlShow.GVWrap(GridView1);
doRowsAndCells();
}
2、GridView的例子
注意:AllowSorting=”True” 和 SortExpression=””
<asp:GridView ID="GridView1"? runat="server"? AllowPaging="True" PageSize="12" AutoGenerateColumns="False"? EmptyDataText="没有数据记录!" AllowSorting="True" OnSorting="GridView1_Sorting" Width="100%" OnPageIndexChanging="GridView1_PageIndexChanging"> <Columns> <asp:BoundField DataField="m_code" HeaderText="编号" SortExpression="m_code"/> <asp:BoundField DataField="m_name" HeaderText="名称" SortExpression="m_name"/> </Columns> </asp:GridView>
这样就OK了!总感觉GridView有点鸡肋的感觉,支持了SqlDataSource,感觉不太灵活,还是得写不少代码,可能是我对他们的本质不甚了解的原因,欢迎大家指教!
关键字: DataSource排序 GridView数据源 绑定数据源
兄弟,谢谢了。真的很好。正需要这东西。我写了个GridView因为是重几个数据库里查询出来的的,用SQL语句不方便(可能因为建数据库的时候没考虑好),所以分几步查询并合并到一个DataTable中,在网上找了很多排序的方法都不能用。你这个还真管用,一用就行了。好啊。
发表评论
相关文章
国内AI资源汇总,AI聊天、AI绘画、AI写作、AI视频、AI设计、AI编程、AI音乐等,国内顺畅访问,无需科学上网。
扫码或点击进入:萤火AI大全
文章分类
最新评论