删除并重新排序gridview中的列并将其保留在回发上

时间:2017-08-01 04:55:17

标签: c# asp.net gridview

我有一个页面,其中 GridView 用于显示记录。现在,我允许用户通过更改列的顺序或添加从预定义列列表中删除列来自定义 GridView 视图。 OnPagePrerender事件我正在从GridView中删除所有单元格,并添加具有用户选择顺序的单元格。它的工作正常,但是当PostBack发生时,它会抛出异常,即

  

无法加载ViewState。等。

因为现在单元格与ViewState中保存的单元格不同。

我想要的是在PostBack上保留我对 GridView 所做的这些更改吗?

2 个答案:

答案 0 :(得分:0)

您必须将GridView(或您的数据记录集)保存在VIEWSTATE中,并仅从 VIEWSTATE重新加载Gridview

换句话说,只有在数据必须更改时才查询数据库,但您必须以recordset可以显示的方式构建gridview的方式数据已加载,即动态SQL,根据需要使用您的列顺序。

然后将recordset保存到viewstate变量中,并在发回作时在gridview中引用它。

我做了类似于行而不是列的操作,是的,当datasource控件在深层操作时,你不能再依赖默认的datasourceIDgridview

答案 1 :(得分:0)

为此,您必须为Gridview列创建新订单。

首先复制你的专栏。第二次重新排序列。

var columns = GridView1.Columns.CloneFields(); // makes a copy of gridview columns
GridView1.Columns.Clear(); // remove all the columns

// now make any order for your gridview columns
GridView1.Columns.Add(columns[3]); // e.g. now your column 4 is placed at first position
GridView1.Columns.Add(columns[0]); // here column 1 is placed at second position