从ASP.Net中的ListView / DataGrid(任何列表)获取DataBound之后的dataItem

时间:2009-11-19 07:40:27

标签: c# asp.net list

我有一个列表(ListView),它显示了很多信息,我想要做的是在DataBounded之后获取DataItem,即在ItemCommand事件上。

我知道我可以将密钥存储在DataKey中,但我需要存储比密钥更多的信息。

信息来自各种外部来源,我只需要保存用户点击的信息。

一些解决方案

  1. 存储密钥并从外部数据源重新获取密钥,但这很昂贵且速度很慢
  2. 将数据存储在会话中,内存价格昂贵
  3. 存储在db中的所有传入数据,但同样不需要数据
  4. 在viewstate中存储,这会创建一个大规模的视图状态......
  5. 从视图本身获取数据,但我不显示我需要的所有数据,不显示某些信息,即Id的
  6. 在我写这篇文章时,我相信除了上面所写的内容之外,没有真正的解决方案。

    任何人都有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

您可以在列表视图模板中使用不可见的文字控件来存储您的额外数据。如果您有复杂的对象,可以像xml一样放置任何内容。这会对每行使用viewstate,因此你会遇到与#4相同的问题,除非你将它存储在控件的行级别,控件将其上下文保存到viewstate而不是手动管理viewstate中的数据

我不建议使用#5,因为依赖视图的数据会导致您必须重新验证该数据服务器端,以确保有人没有弄乱它。

在某些时候,您需要存储信息服务器端或客户端。如果您担心服务器端存储或转发过程缓慢存在问题,那么将其存储在客户端,但意识到这将增加您的带宽和客户端并请求处理。

你真的需要测试你的具体案例,看看你能负担得起的负担,因为没有任何魔法可以消除这种负担。