我有一个带有以下功能的动态网格视图:
您可以使用复选框选择可见的列。这是通过以下方式实现的:
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数据库,我不允许使用任何第三方组件。
答案 0 :(得分:0)
我通过向gridview添加ViewStateMode="Disabled"
属性解决了这个问题。