这两天搞gridview 排序,发现gridview只有指定DataSourceid的时候才支持。因为datatable不主持排序,如果数据源是datatable的话需要自己定义。网上很多,方法到也很简单,记录做个备忘
HTML代码
<asp:GridView ID="GView" runat="server" AutoGenerateColumns="false" AllowPaging="true"
OnPageIndexChanging="GView_PageIndexChanging" AllowSorting="true"
onsorting="GView_Sorting">
<Columns>
<asp:BoundField HeaderText="指标名称" DataField="showname" />
<asp:BoundField HeaderText="计量单位" DataField="itemunit" ItemStyle-HorizontalAlign="Center" />
<asp:BoundField HeaderText="偏差" DataField="chrData" ItemStyle-HorizontalAlign="Right" DataFormatString="{0:#0.0%}" SortExpression="chrData" /> //设置需要排序的列
</Columns>
</asp:GridView>
//指定Gridview运行排序,
<asp:GridView ID="GView" runat="server" AutoGenerateColumns="false" AllowPaging="true"
OnPageIndexChanging="GView_PageIndexChanging" AllowSorting="true"
onsorting="GView_Sorting">
<Columns>
<asp:BoundField HeaderText="指标名称" DataField="showname" />
<asp:BoundField HeaderText="计量单位" DataField="itemunit" ItemStyle-HorizontalAlign="Center" />
<asp:BoundField HeaderText="偏差" DataField="chrData" ItemStyle-HorizontalAlign="Right" DataFormatString="{0:#0.0%}" SortExpression="chrData" /> //设置需要排序的列
</Columns>
</asp:GridView>
//指定Gridview运行排序,
后台CS代码
C#
//主要代码
protected void GView_Sorting(object sender, GridViewSortEventArgs e)
{
GridViewSortExpression = e.SortExpression;
GView.DataSource = SortDataTable((DataTable)GView.DataSource, false);
GView.DataBind();
}
//可以针对分页和不分页分别设置
protected void GView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GView.PageIndex = e.NewPageIndex;
GView.DataSource = SortDataTable((DataTable)GView.DataSource, true);
GView.DataBind();
}
private string GridViewSortDirection //设置属性,默认ASC
{
get { return ViewState["SortDirection"] == null ? "ASC" : ViewState["SortDirection"].ToString(); }
set { ViewState["SortDirection"] = value; }
}
private string GridViewSortExpression
{
get { return ViewState["SortExpression"] == null ? "" : ViewState["SortExpression"].ToString(); }
set { ViewState["SortExpression"] = value; }
}
private string GetSortDirection() //设置排序
{
switch (GridViewSortDirection)
{
case "ASC":
GridViewSortDirection = "DESC";
break;
case "DESC":
GridViewSortDirection = "ASC";
break;
}
return GridViewSortDirection;
}
//根据DataView 排序
protected DataView SortDataTable(DataTable dataTable, bool isPageIndexChanging)
{
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
if (GridViewSortExpression != string.Empty)
{
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 GView_Sorting(object sender, GridViewSortEventArgs e)
{
GridViewSortExpression = e.SortExpression;
GView.DataSource = SortDataTable((DataTable)GView.DataSource, false);
GView.DataBind();
}
//可以针对分页和不分页分别设置
protected void GView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GView.PageIndex = e.NewPageIndex;
GView.DataSource = SortDataTable((DataTable)GView.DataSource, true);
GView.DataBind();
}
private string GridViewSortDirection //设置属性,默认ASC
{
get { return ViewState["SortDirection"] == null ? "ASC" : ViewState["SortDirection"].ToString(); }
set { ViewState["SortDirection"] = value; }
}
private string GridViewSortExpression
{
get { return ViewState["SortExpression"] == null ? "" : ViewState["SortExpression"].ToString(); }
set { ViewState["SortExpression"] = value; }
}
private string GetSortDirection() //设置排序
{
switch (GridViewSortDirection)
{
case "ASC":
GridViewSortDirection = "DESC";
break;
case "DESC":
GridViewSortDirection = "ASC";
break;
}
return GridViewSortDirection;
}
//根据DataView 排序
protected DataView SortDataTable(DataTable dataTable, bool isPageIndexChanging)
{
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
if (GridViewSortExpression != string.Empty)
{
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();
}
}