保持gridview列索引的原始顺序

本文关键字:原始 顺序 索引 gridview 保持 | 更新日期: 2023-09-27 18:05:46

我有一个具有以下功能的动态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["grd_Orig"] = grd;

但到目前为止,这些都不起作用:网格总是在第二次重新排序时中断,看起来它没有重建其原始索引。还有别的办法吗?数据来自MSSQL数据库,我不允许使用任何第三方组件。

保持gridview列索引的原始顺序

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