我有一个gridview(实际上是一个SPgridview)
我使列名可以点击,以便用户可以使用数据对行进行排序。 这很好。
当用户在对数据进行排序后尝试选择行时,会出现此问题。 我可以看到gridview有点“忘记”行的排序方式,并在排序之前选择点击索引处的行。
我该如何解决? 我尝试在用户选择一行后再次对行进行排序,但这似乎不起作用。 并且gridview应该记住它刚刚排序的事实吗?
提前致谢:)
答案 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。我发现这有效:
if (Session["dtbl"] == null) { Session["dtbl"] = method_to_fetch_datatable(); } gv.DataSource = Session["dtbl"] as DataTable; gv.DataBind();
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中保存的值进行排序。
这很好,只有一个问题。 排序后,我在按下同一列多次后切换方向。 现在它认为我一直按下列标题,所以它一直在反转排序。
但我真的只是朝着一个方向发展。 现在我在排序事件中玩发送者对象,我想如果我能得到一些关于导致事件的信息,我可以告诉它只根据发送者切换方向。
谢谢:)