排序函数

时间:2016-06-24 11:32:32

标签: c#

我使用以下代码以编程方式对GridView进行了排序:

grdCars.Sort(grdCars.Columns[3].ToString(), SortDirection.Ascending);

然而,当我使用下面的代码获取DataKeys值时:

grdCars.DataKeys[i].Value.ToString()

它抛出一个"System.ArgumentOutOfRangeException",因为DataKeys“枚举没有产生任何结果”,即它在排序后被擦除。

有人可以纠正这个吗?我可以在不删除DataKeys枚举的情况下对Gridview进行编程排序吗?

任何建议/意见/代码样本都非常赞赏...

1 个答案:

答案 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();
}