【问题标题】:How to access a ListViewDataItem datakeys如何访问 ListViewDataItem 数据键
【发布时间】:2017-05-03 14:15:41
【问题描述】:

我想知道如何访问作为 ListView 成员的 ListViewDataItem 的数据键。

我觉得奇怪的是,在调试时可以访问可以在这里看到的 DataKeysContainer

但是在编码过程中尝试访问 DataKeyContainer 是不可能的,也可以在这里看到

任何关于如何访问 ListViewDataItem 的数据键及其值的建议将不胜感激。

【问题讨论】:

  • 在第二个屏幕截图中,您已投射到 ListViewItem
  • @AFriend 是正确的。将其更改为For Each l as ListViewDataItem,它应该可以按您的要求工作。
  • 道歉,愚蠢的错误,但是当更改为 ListViewDataItem 时问题仍然存在,我仍然无法访问 DataKeys - 请参阅新的和更新的第二个屏幕截图。
  • 如果您检查this link,您会发现DataKeysContainer 属性不是Browsable,这就是您看不到它的原因。如果您绝对必须使用它,那么您必须继承并使其成为Browsable。可以查看源码on github
  • @AFriend 哦,好吧,我明白了.. 走另一条路可能会更好。我正在尝试访问其中一项数据键包含某个值的列表视图的索引。可能类似于 Windows 窗体中可用的 ListView.FindItemWithText 函数,但在 ASP.NET 中除外。任何其他建议。感谢您的帮助。

标签: asp.net .net vb.net listview


【解决方案1】:

您可以使用后期绑定,即将循环变量装在Object 中。这允许您将成员验证推迟到在运行时访问该成员时。类似于c#中的动态。

For Each itemObject As Object In lstViewModules.Items
    ' the DataKeysContainer you were looking for
    Dim container = CType(itemObject.DataKeysContainer, Control) 
    ' the same l in your loop
    Dim l = CType(itemObject, ListViewDataItem) 
    '  from here on, the rest of your loop code should work
    Dim key As DataKey = lstViewModules.DataKeys(l.DataItemIndex)
    Dim value = key("name")
Next

既然您知道它是 ListView,您还可以将 container 转换为 ListView,以便在设计时轻松。

注意:您必须拥有Option Strict Off 才能使用。

【讨论】:

  • 非常感谢,让我免于拔掉最后一根头发
  • 只是一个免责声明,这是在规避设计者的初衷,只应在绝对必要时使用:)
  • 哦,我明白了,在帮助我度过了很多时光之后,拥有一些非常有用的知识。再次感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2013-01-21
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
相关资源
最近更新 更多