【问题标题】:sorting in datagrid lost on page load在页面加载时丢失的数据网格中的排序
【发布时间】:2011-11-11 15:51:01
【问题描述】:
//Sort User Table
private void SortGridView(string sortExpression, string direction)
{
    DataTable dataTable = BindGridView(Session["useremail"].ToString()).Tables[0];
    if (dataTable != null)
    {
        DataView dataView = new DataView(dataTable);
        dataView.Sort = sortExpression + direction;

        UserTable.DataSource = dataView;
        UserTable.DataBind();
    }
}

protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
    string sortExpression = e.SortExpression;
    if (GridViewSortDirection == SortDirection.Ascending)
    {
        GridViewSortDirection = SortDirection.Descending;
        SortGridView(sortExpression, " ASC");
    }

    else
    {
        GridViewSortDirection = SortDirection.Ascending;
        SortGridView(sortExpression, " DESC");
    }
}

public SortDirection GridViewSortDirection
{
    get
    {
        if (ViewState["sortDirection"] == null)
            ViewState["sortDirection"] = SortDirection.Ascending;
        return (SortDirection)ViewState["sortDirection"];
    }
    set { ViewState["sortDirection"] = value; }
}

当我编辑用户并更新编辑或进行一些搜索,并清除页面加载的搜索并且排序丢失时,

private DataSet BindGridView(string email)
    {
        .......
    }

 protected void btnUpdate_Click(object sender, EventArgs e)
   {
      .....
       BindGridView(Session["useremail"].ToString());
    }

每次页面加载或某些回发完成时,排序都会丢失如何保留排序。

页面加载

 if (PermissionList.Any(item => item.Equals("Edit user")))        
     {            
            if (!IsPostBack)
            {
                BindGridView(Session["useremail"].ToString());
            }
        }

【问题讨论】:

  • 您的 Page_Load 中有什么内容?
  • 这与您之前提出的问题基本相同。无论您在哪里 Bind() 数据,您还必须在绑定之前对其进行排序,以便在绑定到控件时对数据进行排序。
  • 本来要发布答案的,但劳埃德是我。他的评论是正确的答案。
  • 嗨劳埃德,我该怎么做。谢谢

标签: c# asp.net sorting gridview


【解决方案1】:

每当您在 gridview 上执行新排序时,将排序表达式存储在隐藏标签或字段中,并且无论何时重新加载/绑定您的 gridview,使用您保存的排序表达式重新排序表格。

.aspx

<asp:Label id="lblHidSortExp" runat="server" visible="false"></asp:Label>

.aspx.cs

protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
    string sortExpression = lblHidSortExp.Text;
    if(sortExpression == e.SortExpression)
        sortExpression += " DESC";
    else
        sortExpression == e.SortExpression;

   //not sure if this is exactly how you get your datatable, but you get the idea
   DataView myView = new DataView(BindGridView(Session["useremail"].ToString()).Tables[0]);
   myView.Sort = sortExpression;
   marksGridView.DataSource = myView;
   marksGridView.DataBind();

   //save sort state
   lblHidSortExp.Text = sortExpression;
}

所以在你的更新函数中说,使用你保存的排序exp

protected void btnUpdate_Click(object sender, EventArgs e)
{
  .....//do update in db
   //reload your table in dataview
   DataView myView = new DataView(/*load table*/);
   //do sort
   myView.Sort = lblHidSortExp.Text;
   //bind gridview
   marksGridView.DataSource = myView;
   marksGridView.DataBind();
}

【讨论】:

  • 如何将排序表达式存储在隐藏标签中,任何代码都会有所帮助。谢谢
  • @Mark 更新了我的答案。仅供参考,希望对您有所帮助:)
【解决方案2】:

我有一个类似的问题,我解决这个问题的方法是将排序值保存在会话中,然后在它们丢失后在 Page_load 中重置它们。

【讨论】:

  • 你不需要为此使用会话内存
  • @Shredder 我会按照您在此处建议的隐藏字段的方式进行研究。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 2013-07-07
相关资源
最近更新 更多