[英]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.