【问题标题】:WPF DataGridRow.Item("xx") - Option Strict On disallows late bindingWPF DataGridRow.Item("xx") - Option Strict On 不允许后期绑定
【发布时间】:2015-10-26 00:24:00
【问题描述】:

使用 DataGrid 的 WPF 应用程序。用户双击一个单元格,我需要获取该行中另一个单元格的值。

Dim dep As DependencyObject = DirectCast(e.OriginalSource, DependencyObject)
Dim dgRow As DataGridRow = Nothing
While dep IsNot Nothing
    If TypeOf dep Is DataGridRow Then
        dgRow = DirectCast(dep, DataGridRow)
    End If
    dep = VisualTreeHelper.GetParent(dep)
End While

所以现在,我有了行,我想从特定列中获取值:

Dim xx As String = dgRow.Item("xx")

这让我“Option Strict On 不允许后期绑定”没有更正选项。它适用于 Option Strict Off。我已经尝试了以下所有方法来纠正它:

dgRow.Item("xx").ToString
DirectCast(dgRow.Item("xx"), String)
CType(dgRow.Item("xx"), String)

但是,在所有这些情况下,红色波浪线都保留在 dgRow.Item("xx") 下。

感谢任何输入,包括解决此问题的替代方法。

更新

这是最终有效的代码。我查看了 Item 属性的类型,它是 DataRowView。感谢 Mark 在下面的回答。

dgRow = DirectCast(DirectCast(dep, DataGridRow).Item, DataRowView)

这让我可以在没有后期绑定错误的情况下做到这一点:

dgRow.Item("xx").ToString

【问题讨论】:

    标签: wpf vb.net datagrid late-binding option-strict


    【解决方案1】:

    dgRow.ItemObject 类型的属性。通过使用dgRow.Item("xx"),您尝试调用默认属性,而Object 的默认属性不存在,因此会出现您所看到的错误。

    ("xx") 部分看来,该行可能绑定到某种字典。如果是这种情况,您需要先将 dgRow.Item 转换为适当的类型,然后才能从中访问值,例如

    Dim xx As String = DirectCast(dgRow.Item, Dictionary(Of String, String))("xx")
    

    更新

    再读一遍,看起来您可能绑定到DataTable,在这种情况下,每一行都会绑定到DataRow,所以您可能需要这样的东西:

    Dim xx As String = DirectCast(dgRow.Item, DataRow).Field(Of String)("xx")
    

    请注意,您可能需要添加对System.Data.DataSetExtensions.dll 的引用才能使Field 方法可用。

    【讨论】:

    • 谢谢!这帮助我修复了它。我已经编辑了我的问题以包含我的最终代码。
    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多