我有一个数据网格,我可以从中删除项目。删除一个项目意味着它在 dataGrid 上不再可见,但它仍在 DataSource 中。
如何将项目(在我删除当前选定的项目后将在列表中可见)设置为选中?
我需要获取对象本身,因为我必须检查一些额外的条件,但我能想到的唯一方法是一些讨厌的 for 循环。
private void OnTakeOneClick(object sender, RoutedEventArgs e)
{
var tableSelectedItem = (PartialPaymentDTO)this.TableDataGrid.SelectedItem;
// var nextItemInGrid = ???
Model.TakeOrderItemsFromTable(tableSelectedItem);
if(tableSelectedItem.QuantityOnTable != 0)
{
this.TableDataGrid.SelectedItem = tableSelectedItem;
}
else
{
// select next item in data grid that based on some extra criteria
}
}
编辑:在选定项目之后获取整个项目列表也非常有帮助。
请注意,我不会从我的数据源中删除项目。相反,我根据标准将它们隐藏在网格中。
WPF:
<DataGrid ItemsSource="{Binding TableItems}" Name="TableDataGrid" AutoGenerateColumns="False"
SelectionChanged ="OnTableDataGridSelected" HeadersVisibility="Column" BorderThickness="0" SelectionMode="Single">
<DataGrid.ItemContainerStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding QuantityOnTable}" Value="0">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.ItemContainerStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Artikl" Binding="{Binding OrderItemName}" IsReadOnly="True" Width="*">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="TextAlignment" Value="Left"/>
<Setter Property="Padding" Value="0,6"/>
<Setter Property="TextWrapping" Value="NoWrap"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
最佳答案
如果您想在 DataGrid
的 Items
集合中选择 tableSelectedItem
之后的项目,请试试这个:
var tableSelectedItem = (PartialPaymentDTO)this.TableDataGrid.SelectedItem;
int indexOfSelectedItem = this.TableDataGrid.Items.IndexOf(tableSelectedItem);
int indexOfNextItem = indexOfSelectedItem + 1;
if (this.TableDataGrid.Items.Count > indexOfNextItem)
this.TableDataGrid.SelectedItem = this.TableDataGrid.Items[indexOfNextItem];
关于c# - 如何根据条件在 Wpf DataGrid 中的选定项目后获取项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42395687/