在WPF DataGrid中获取多个选定行的值

时间:2016-04-19 15:33:29

标签: .net wpf vb.net xaml datagrid

我试图获取WPF DataGrid中所有选定行的第一列("值")的值。

这是XAML:

        <DataGrid x:Name="UPCs"
                  ItemsSource="{Binding Source={StaticResource SumsViewSource}}"
                  AutoGenerateColumns="False"
                  HeadersVisibility="Column"
                  IsReadOnly="True">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="Value"
                                    Binding="{Binding Value}"
                                    Header="Item"
                                    Width="3*" />
                <DataGridTextColumn x:Name="Qty"
                                    Binding="{Binding Qty}"
                                    Header="Qty"
                                    Width="1*" />
            </DataGrid.Columns>
        </DataGrid>

我已经知道如何从第一个选定的行中获取所需的值:

Dim SelRow As String = DirectCast(UPCs.Columns.Item(0).GetCellContent(UPCs.SelectedValue), TextBlock).Text

我无法弄清楚如何将其用于多行选择。

2 个答案:

答案 0 :(得分:0)

将以下属性添加到数据网格中;

SelectionMode="Extended" SelectionUnit="FullRow" SelectedCellsChanged="UPCs_OnSelectedCellsChanged"

然后创建一个事件处理程序SelectedCellsChanged,从事件处理程序传递发送者(datagrid)作为对象到以下函数;

    Public Shared Function GetColumnCollection(sender As Object) As List(Of String)

    Dim dataGrid As DataGrid = DirectCast(sender, DataGrid)

    Dim selectedItems = dataGrid.SelectedItems

    Return (From x As <<SumsViewSource type>> In selectedItems Select x.<<the property in SumsViewSource>>).ToList()

End Function

显然,您必须更换&lt;&gt;与您的收藏类型和&lt;&gt;你想要的SumsViewSource的实际属性(x.Value?)。您还必须将函数返回类型更改为您想要的(不总是字符串列表)

我希望这至少让你走上正确的道路。

答案 1 :(得分:0)

感谢朋友,我的所作所为:

For Each Row As DataRowView In UPCs.SelectedItems
    If Row IsNot Nothing Then
        Dim x As String = Row.Row("Value")
        MessageBox.Show(x)
    End If
Next

并在课程上方添加Imports System.Data

它会为使用第一列的值选择的每一行显示一个对话框(&#34;值&#34;)。