0

我想获得一个能够根据特定列的值添加子标题(一行或多行)的网格(数据源按此列排序)。在我继承的 GridView 中,我重写了 OnRowDataBind 方法:如果当前调用 OnRowDataBind 时考虑列的值不等于先前的值,则在当前行之前插入特殊标题行。

Table tbl = this.Controls[0] as Table; //this - pointer to CustomGridView tbl.Controls.AddAt(rowIndex + add_counter + 1, NewSubHeaderRow); /*rowIndex - RowIndex of current row, add_counter - amount of already added SubHrader rows */

一切正常。但是问题发生在回发时,当 GridView 恢复它的状态时。每个组的第一行及其所有控件(换句话说,每个动态添加的子标题行之后的第一行)没有任何属性。但是组中的第二行保留了自己的属性和第一行的属性。

一些帮助将非常有用。也许还有另一种(也是正确的)方法可以将行添加到 GridView 中。那么请给我提供教程或文章的链接。

4

2 回答 2

0

动态控件在回发时消失,因为回发框架没有关于此类控件的信息。跟踪这些动态控件并在回发后重新创建它们是程序员的责任...

请参考以下帖子在回发时重新创建动态控件: FAQ:为什么动态控件在回发时消失

于 2011-07-27T09:29:46.353 回答
0

感谢瓦卡斯。这是我的决定。我覆盖 CreateChild(datasource, isBinding) 并创建放置行索引的列表,在此之前您应该添加子标题行。在 SaveViewState 上,我将此列表添加到密封对象。在加载 ViewState 时,我加载此列表,如果它不为空,则通过保存的索引创建子标题行。也许,有一种更简单、更自然的方式。但它安全地对我隐藏)))

于 2011-09-16T08:14:19.130 回答