如何在不选择单元格或相应行的情况下从wpf数据网格中检索特定单元格值?

时间:2011-11-10 17:20:59

标签: wpf datagrid

我正在使用WPF DataGrid,我希望使用DataGridCellcolumn索引检索row的值:我能做的就是这但它没有用:

myDatGrid.Columns[0].GetCellContent((DataGridRow)myDatGrid.Items[0]);

请你告诉我实现这个目标的方法

3 个答案:

答案 0 :(得分:0)

您的单元格值将取决于给定列绑定的内容。整个将是您模型的实例。

假设我们在Person内绑定了DataGrid个类的集合。

Person p = ((ContentPresenter)myDatGrid.Columns[0].GetCellContent(myDatGrid.Items[0])).Content;

Content属性将返回的基础模型。如果你想获得一个给定的属性,你可以通过直接访问应该实现INotifyPropertyChanged的underyling对象来实现,不需要像在WinForms应用程序中那样愚弄DataGrid

答案 1 :(得分:0)

好吧我想我得到了它,我错过了一些我应该放的演员表,因为我使用的专栏是DataGridComboBoxColumn

我应该这样做:

((ComboBox)(myDatGrid.Columns[0].GetCellContent(
(TestData)myDatGrid.Items[0]))).SelectedValue.ToString());

现在可行。

答案 2 :(得分:0)

我尝试了上面提出的建议并且没有用。

我挣扎了一整天试图绑定一个ComboBox并在第一次加载时在WPF Datagrid中选择正确的值,所以我想我会在这里分享我的解决方案,希望其他人可以受益。抱歉VB,但这个概念也适用于C#。

首先,如果您尝试在网格首次加载时填充并选择值,则需要将代码放在正确的事件处理程序中:LayoutUpdated。在其他事件处理程序中,GetCellContent函数返回Nothing(null)。您还可以将此代码放在事件处理程序中,以处理稍后发生的事件,例如Button.Click事件(如果符合您的要求)。

其次,代码:

        For i As Int32 = 0 To DataGrid1.Items.Count - 1
        Dim row As DataGridRow
        row = DataGrid1.ItemContainerGenerator.ContainerFromItem(DataGrid1.Items(i))
        If row IsNot Nothing AndAlso row.Item IsNot Nothing Then
            Dim cp As ContentPresenter = DataGrid1.Columns(3).GetCellContent(DataGrid1.Items(i))
            If cp IsNot Nothing AndAlso cp.ContentTemplate IsNot Nothing Then
                Dim dt As DataTemplate = cp.ContentTemplate
                If dt IsNot Nothing Then
                    Dim cb As ComboBox = dt.FindName("cbVendorNames", cp)
                    If cb IsNot Nothing Then
                        cb.ItemsSource = Vendors
                        cb.DisplayMemberPath = "VendorName"
                        cb.SelectedValuePath = "AS_ID"

                        cb.SelectedValue = "" ' set your selected value here


                    End If
                End If
            End If
        End If
    Next

这段代码的作用是(a)循环遍历数据网格中的所有行,(b)获取所选单元格的ContentPresenter(在本例中为每行中的单元格3),(c)获取DataTemplate ContentPresenter,(d)最后得到ComboBox的引用。这允许我将ComboBox绑定到外部数据源(List(Of Vendor)并选择它的值。这段代码对我有用。

我发现这种解决方案不是特别优雅或高效,但确实有效。如果有人有更好的解决方案,请发布。