保持gridview列索引原始订单

时间:2016-09-05 12:36:16

标签: c# asp.net gridview

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

  • 您可以使用复选框选择可见的列。这是通过以下方式实现的:

        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数据库,我不允许使用任何第三方组件。

1 个答案:

答案 0 :(得分:0)

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