我想获得一个能够根据某列的值添加子标题(一行或多行)的网格(数据源按此列排序)。在我继承的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中。那么请给我提供教程或文章的链接。
答案 0 :(得分:0)
动态控件在回发时消失,因为在回发框架上没有关于此类控件的信息。程序员有责任跟踪这些动态控件并在回发后重新创建它们。
请参阅以下帖子,以便在回发时重新创建动态控件: FAQ: Why do dynamic controls disappear on postback
答案 1 :(得分:0)
感谢Waqas。 这是我的决定。 我重写CreateChild(datasource,isBinding)并创建列表放置行的索引,在此之前你应该添加subheader行。在SaveViewState上,我将此列表添加到密封对象。在加载ViewState时,我加载此列表,如果它不为null,则按保存的索引创建子标题行。 也许,有一种更简单,更自然的方式。但它安全地隐藏起来)))