排序的gridview选择错误的行

时间:2009-05-15 19:10:43

标签: asp.net sharepoint gridview sorting spgridview

我有一个gridview(实际上是一个SPgridview)

我使列名可以点击,以便用户可以使用数据对行进行排序。 这很好。

当用户在对数据进行排序后尝试选择行时,会出现此问题。 我可以看到gridview有点“忘记”行的排序方式,并在排序之前选择点击索引处的行。

我该如何解决? 我尝试在用户选择一行后再次对行进行排序,但这似乎不起作用。 并且gridview应该记住它刚刚排序的事实吗?

提前致谢:)

6 个答案:

答案 0 :(得分:2)

确保在回发后不重新绑定网格。

if(!IsPostBack)
{
  gridView.DataSource = yourDataSource;
  gridView.DataBind();
}

答案 1 :(得分:2)

处理Sorting事件时,会话变量将其设置为排序方向,并在重新绑定数据源时使用它。

protected void gridview_Sorting()
{
    // BIND DATA Function
    BindData();

    DataTable dt = gridview.DataSource as DataTable;

    if (dt != null)
    {
        //Sort the data.
        dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);

        Session["sort"] = dt.DefaultView.Sort;
        gridview.DataSource = dt;
        gridview.DataBind();
    }
}





// bind data function//

private void BindData()
{

    DataTable dt = GetDataTable();

    if (Session["sort"] != null)
    {
        //Sort the data.
        dt.DefaultView.Sort = Session["sort"].ToString();
    }

    gridview.DataSource = dt;
    gridview.DataBind();
}

答案 2 :(得分:1)

您是按照行索引还是想要编辑的数据的唯一标识符来抓取所选行?如果您按行索引获取,则可能是“遗忘”,因为您正在OnPostBack上重新创建网格。尝试迭代数据并通过它的唯一ID选择它,而不是它的行索引。

答案 3 :(得分:1)

查看Johans关于SPGridView and LinqDataSource

的博客

答案 4 :(得分:1)

我已经制作了许多可排序的GridViews,但是今天之前我没有使用行命令交互,当时我偶然发现了这个问题。我是一个“普通的”GridView,而不是SPgridview。我发现这有效:

  1. 在bindData()中,如果我们还没有创建DataTable并将其放在Session对象中,请执行此操作。否则,我们将使用现有的,已排序的DataTable:
  2. if (Session["dtbl"] == null) {
      Session["dtbl"] = method_to_fetch_datatable();
    }
    gv.DataSource = Session["dtbl"] as DataTable;
    gv.DataBind();
    
    1. 在GridView处理INSERT,UPDATE或DELETE基础数据的行命令时,刷新Session对象,维护排序,如果有的话:
    2. Session["dtbl"] = method_to_fetch_datatable();
      if (ViewState["SortExpression"] != null) {
        DataTable dt = Session["dtbl"] as DataTable;
        dt.DefaultView.Sort = ViewState["SortExpression"] as string;
      }
      bindData();
      

答案 5 :(得分:0)

我得到了它的工作。 (有点)

在排序事件中,我保存了sortexpression(用于排序的列的名称) 并且sortdirection上升或下降。

然后我为gridview和databind创建数据源,在数据绑定之后,我使用gridview.sort命令按照我在viewstate中保存的值进行排序。

这很好,只有一个问题。 排序后,我在按下同一列多次后切换方向。 现在它认为我一直按下列标题,所以它一直在反转排序。

但我真的只是朝着一个方向发展。 现在我在排序事件中玩发送者对象,我想如果我能得到一些关于导致事件的信息,我可以告诉它只根据发送者切换方向。

谢谢:)