首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在页面加载时丢失的数据网格中的排序

在页面加载时丢失的数据网格中的排序
EN

Stack Overflow用户
提问于 2011-11-11 23:51:01
回答 2查看 1.6K关注 0票数 0
代码语言:javascript
复制
//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; }
}

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

代码语言:javascript
复制
private DataSet BindGridView(string email)
    {
        .......
    }

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

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

页面加载

代码语言:javascript
复制
 if (PermissionList.Any(item => item.Equals("Edit user")))        
     {            
            if (!IsPostBack)
            {
                BindGridView(Session["useremail"].ToString());
            }
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-12 00:01:34

无论何时在网格视图上执行新的排序,将排序表达式存储在隐藏的标签或字段中,以及在任何时候重新加载/绑定网格视图,都可以使用保存的排序表达式对表进行重新排序。

.aspx

代码语言:javascript
复制
<asp:Label id="lblHidSortExp" runat="server" visible="false"></asp:Label>

.aspx.cs

代码语言:javascript
复制
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;
}

因此,假设在update函数中,使用保存排序表达式

代码语言:javascript
复制
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();
}
票数 1
EN

Stack Overflow用户

发布于 2011-11-11 23:55:30

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8096507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档