【发布时间】: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 是一个隐藏字段,用于保持您设置的字段顺序。
一切正常,但是当您执行搜索并重新排序网格时,用于执行 RemoveAt 和 Insert 的索引不再与原始索引匹配,并且由于不匹配而导致后续搜索惨遭失败。
我每次在移动列之前都尝试重建网格,如下所示:
grd.DataSource = null; //I tried with the original DataSource aswell.
grd.DataBind();
我还尝试将原始网格存储在 Session 变量中,如下所示:
Session["grd_Orig"] = grd;
但到目前为止,这些都没有奏效:网格总是在第二次重新排序时中断,并且看起来它没有重建其原始索引。 还有另一种方法可以做到这一点吗? 数据来自 MSSQL 数据库,我不允许使用任何 3rd 方组件。
【问题讨论】: