【问题标题】:Keeping gridview column index original order保持gridview列索引原始顺序
【发布时间】:2016-09-05 12:36:15
【问题描述】:

我有一个具有以下功能的动态网格视图:

  • 您可以使用复选框来选择可见的列。这是这样实现的:

        if (!chkTBDataRdo.Checked)
            grd.Columns[11].Visible = false;
        else
            grd.Columns[11].Visible = true;
    
  • 您可以拖放标签以选择列的显示顺序。

        if (hColumnList.Value != "")
        {
            string[] ordine = hColumnList.Value.Split(',');
    
            for (int i = 0; i < ordine.Length; i++)
            {
                var columnToMove = grd.Columns[Convert.ToInt32(ordine[i])];
                grd.Columns.RemoveAt(Convert.ToInt32(ordine[i]));
                grd.Columns.Insert(i, columnToMove);
            }
    
        }
    

hColumnList 是一个隐藏字段,用于保持您设置的字段顺序。 一切正常,但是当您执行搜索并重新排序网格时,用于执行 RemoveAtInsert 的索引不再与原始索引匹配,并且由于不匹配而导致后续搜索惨遭失败。

我每次在移动列之前都尝试重建网格,如下所示:

grd.DataSource = null; //I tried with the original DataSource aswell.
grd.DataBind();

我还尝试将原始网格存储在 Session 变量中,如下所示:

Session["grd_Orig"] = grd;

但到目前为止,这些都没有奏效:网格总是在第二次重新排序时中断,并且看起来它没有重建其原始索引。 还有另一种方法可以做到这一点吗? 数据来自 MSSQL 数据库,我不允许使用任何 3rd 方组件。

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

    我通过将ViewStateMode="Disabled" 属性添加到gridview 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-15
      • 2016-11-19
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多