【发布时间】:2015-07-29 10:34:13
【问题描述】:
我需要在 GridView 的列中添加一个排序功能。
我已将 GridView 上的 AllowSorting-property 设置为 true 并将 sort expression 添加到列中。
<asp:BoundField DataField="doName" HeaderText="doName" SortExpression="doName" />
不幸的是,排序在 GridView 中不起作用。
下面是我应该能够排序的列的代码隐藏文件,但我收到错误:
异常详细信息:System.IndexOutOfRangeException:找不到列 名称。
背后的代码:
string sortingDirection;
DataSet dsProducts = new DataSet();
DataTable dt1 = new DataTable();
public SortDirection dir
{
get
{
if (ViewState["dirState"] == null)
{
ViewState["dirState"] = SortDirection.Ascending;
}
return (SortDirection)ViewState["dirState"];
}
set
{
ViewState["dirState"] = value;
}
}
public string SortField
{
get
{
return (string)ViewState["SortField"] ?? "doName";
}
set
{
ViewState["SortField"] = value;
}
}
protected void gvProducts_Sorting(object sender, GridViewSortEventArgs e)
{
sortingDirection = string.Empty;
if (dir == SortDirection.Ascending)
{
dir = SortDirection.Descending;
sortingDirection = "Desc";
}
else
{
dir = SortDirection.Ascending;
sortingDirection = "Asc";
}
DataView sortedView = new DataView(dt1);
sortedView.Sort = e.SortExpression + " " + sortingDirection;
SortField = e.SortExpression;
gvProducts.DataSource = sortedView;
gvProducts.DataBind();
}
protected void gvProducts_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
if (dir == SortDirection.Ascending)
{
sortingDirection = "Asc";
}
else
{
sortingDirection = "Desc";
}
DataView sortedView = new DataView(dt1);
sortedView.Sort = SortField + " " + sortingDirection;
gvProducts.DataSource = sortedView;
gvProducts.PageIndex = e.NewPageIndex;
gvProducts.DataBind();
}
private void BindData()
{
gvProducts.DataSource = RetrieveProducts();
gvProducts.DataBind();
}
private DataSet RetrieveProducts()
{
sql = "Select * from doTable;";
dsProducts = new DataSet();
using (OdbcConnection cn =
new OdbcConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString))
{
cn.Open();
using (OdbcCommand cmd = new OdbcCommand(sql, cn))
{
OdbcDataAdapter adapter = new OdbcDataAdapter(cmd);
adapter.Fill(dsProducts);
dt1 = new DataTable();
dsProducts.Tables.Add(dt1);
}
}
return dsProducts;
}
【问题讨论】:
-
您后面的代码看起来像是一个类。这很令人困惑,我不知道您为什么有 SortDirection 的属性,而其中没有什么?!