繁体   English   中英

WPF-如何从C#中的DataGrid的多个选定行中获取单元格内容-XAML

[英]WPF - How to get cell contents from multiple selected rows in a DataGrid in C# - xaml

我希望能够在此DataGrid中选择多行,然后检索所选单元格中存在的数据。 我在网上找到的所有内容均无效。 我尝试使用“ SelectionChanged”和“ SelectedCellsChanged”之类的事件参数来获取行索引,但是它的行为方式无法让我跟踪所有选定的行。

任何人都可以建议这样做的方法吗? 提前致谢。

DataGrid代码:

<DataGrid x:Name="walkGrd" ItemsSource="{Binding overviewGrd}" RowHeaderWidth="0" AutoGenerateColumns="True" ColumnWidth="*" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserSortColumns="False"  IsReadOnly="True" SelectionMode="Extended" SelectionUnit="FullRow" Margin="1,63,0,37"  RowHeight="18" FontSize="13" BorderBrush="Black" AreRowDetailsFrozen="True">
        <DataGrid.Resources>
            <Style TargetType="{x:Type DataGridCell}">
                <Setter Property="BorderThickness" Value="0"/>
                <Setter Property="Margin" Value="0,0,-1,0"/>
                <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="DarkGray"/>
                        <Setter Property="Foreground" Value="White"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
            <Style x:Key="Body_Content_DataGrid_Centering"
                TargetType="{x:Type DataGridCell}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridCell}">
                            <Grid Background="{TemplateBinding Background}">
                                <ContentPresenter VerticalAlignment="Center" />
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn Header="Identifier" TextBlock.TextAlignment="Justify" Binding="{Binding one}" Width="0.25*" />
            <DataGridTextColumn Header="ID OID" Binding="{Binding two}" Width="0.25*" />
            <DataGridTextColumn Header="Up Time" Binding="{Binding three}" Width="0.25*" />
            <DataGridTextColumn Header="Time OID" Binding="{Binding four}" Width="0.25*" />

        </DataGrid.Columns>
    </DataGrid>
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    //Get SelectedItems from DataGrid.
    var grid = sender as DataGrid;
    var selected = grid.SelectedItems;

    foreach (var item in selected)
    {
        var item = item as ClassName;
    }
}

SelectionMode设置为Multiple

我在这篇文章中找到了解决方案-DataGrid获取选定行的列值

它还处理是否取消选择行。

private void walkGrd_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
    foreach (var item in e.AddedCells)
    {
         var col = item.Column as DataGridColumn;
         var fc = col.GetCellContent(item.Item);

         if (fc is TextBlock)
         {
             Console.WriteLine("Values" + (fc as TextBlock).Text);
         }
         //// Like this for all available types of cells
    }
    foreach (var item in e.RemovedCells)
    {
         var col = item.Column as DataGridColumn;
         var fc = col.GetCellContent(item.Item);

         if (fc is TextBlock)
         {
            Console.WriteLine("Values Removed" + (fc as TextBlock).Text);
         }
         //// Like this for all available types of cells
    }   
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM