我使用以下代码以编程方式对GridView进行了排序:
grdCars.Sort(grdCars.Columns[3].ToString(), SortDirection.Ascending);
然而,当我使用下面的代码获取DataKeys值时:
grdCars.DataKeys[i].Value.ToString()
它抛出一个"System.ArgumentOutOfRangeException"
,因为DataKeys“枚举没有产生任何结果”,即它在排序后被擦除。
有人可以纠正这个吗?我可以在不删除DataKeys枚举的情况下对Gridview进行编程排序吗?
任何建议/意见/代码样本都非常赞赏...
答案 0 :(得分:0)
数据源属性不是往返之间持久状态的一部分,这就是它的值丢失的原因。 如果您正在使用排序事件设置会话变量将其设置为排序方向,并在重新绑定数据源时使用它。
protected void gridview_Sortingevent()
{
// BIND Data with Gridview
GridViewDataBind();
DataTable dt = gridview.DataSource as DataTable;
if (dt != null)
{
//Sort the data.
dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
Session["sessionsort"] = dt.DefaultView.Sort;
gridview.DataSource = dt;
gridview.DataBind();
}
}
转到网格视图
private void GridViewDataBind()
{
DataTable dt = GetDataTable();
if (Session["sessionsort"] != null)
{
//Sort the data.
dt.DefaultView.Sort = Session["sessionsort"].ToString();
}
gridview.DataSource = dt;
gridview.DataBind();
}