【问题标题】:Problem with dynamically added subheader into custom GridView将子标题动态添加到自定义 GridView 的问题
【发布时间】:2011-10-14 01:51:03
【问题描述】:

我想获得一个能够根据特定列的值添加子标题(一行或多行)的网格(数据源按此列排序)。在我继承的 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 中。那么请给我提供教程或文章的链接。

【问题讨论】:

    标签: c# asp.net gridview customizing


    【解决方案1】:

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

    请参阅以下帖子以重新创建回发动态控件: FAQ: Why do dynamic controls disappear on postback

    【讨论】:

    • 我是否应该在 CustomGridView 的重写 OnLoad 中对每个回发调用 DataBind 函数?在这种情况下,我们需要 StateView 做什么?
    • 是的,你需要在每次回发时添加动态标题。这是一个关于维护动态控件的视图状态的好例子:chiragrdarji.wordpress.com/2009/05/20/…
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 2013-05-15
      • 2020-01-22
      • 2012-03-13
      • 1970-01-01
      相关资源
      最近更新 更多