GridView RowDataBound不会在回发时触发

Rya*_*ndy 7 c# vb.net asp.net postback gridview

在ASP.NET页面上,我有一个填充了LINQ查询结果的GridView.我在代码中设置DataSource,然后在其上调用DataBind.在GridView的RowDataBound事件中,我根据查询结果选择性地隐藏某些GridView字段中的链接.(例如,我隐藏有问题的行的"显示父级"链接没有父行.)

这最初工作正常.但是在回发时(当我调用DataBind,但GridView通过ViewState保持填充时),数据显示,但RowDataBound事件(显然)不会触发,并且我的链接不会被隐藏.

回发后隐藏链接的最佳方法是什么?

Rya*_*ndy 2

这是我最终解决这个问题的方法:

  1. 我创建了一个具有只读属性的可序列化类:行的 PK,以及每个链接的布尔值,指示它是否启用。我们就这样称呼它LinkVisibility
  2. 我创建了一个继承自 KeyedCollection 的可序列化类来保存上述类的实例。
  3. 我创建了一个 ViewState 支持的属性,其中包含该集合的一个实例。
  4. 在我的搜索过程(填充 GridView)中,我清除了该集合。
  5. 在最初显示/隐藏链接的 RowDataBound 中,我LinkVisibility向每行的集合添加一个实例。
  6. 在 Page.Load 中,当 IsPostBack 为 true 时,我会循环遍历 GridView 行。我通过 PK 在集合中查找LinkVisibility每一个(DataKeyNames 在 GridView 中设置),并相应地设置链接。

我不知道这是最好的方法,但它确实有效,这比我尝试过的任何其他方法都有效。