c# - DataGrid 中的选定行已丢失
问题描述
我有一个 DataGrid,他们的行更新得非常快。每行都有一个右键单击事件,如果单击该事件,则应将此选定的行添加到另一个 dataGrid。问题是当用户选择一行以添加到另一个列表时,因为更新了选定的行,他无法添加,所以用户应该一次又一次地选择该行。我的代码是这样的
<DataGrid SelectionMode="Single" CanUserAddRows="False"CanUserDeleteRows="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="Data1" Binding="{Binding Path=Data1}"></DataGridTextColumn>
<DataGridTextColumn Header="Data2" Binding="{Binding Path=Data2}"></DataGridTextColumn>
<DataGridTextColumn Header="Data3" Binding="{Binding Path=Data3}"></DataGridTextColumn>
<DataGridTextColumn Header="Data4" Binding="{Binding Path=Data4}"></DataGridTextColumn>
<DataGridTextColumn Header="Data5" Binding="{Binding Path=Data5}"></DataGridTextColumn>
<DataGridTextColumn Header="Data6" Binding="{Binding Path=Data6}"></DataGridTextColumn>
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu HorizontalContentAlignment="Right" FlowDirection="RightToLeft">
<MenuItem Name="addToBlackListMnuBtn" Header="Add to Black List" Click="addToBlackListMnuBtn_Click" FontWeight="Black"/>
<MenuItem Name="addtoReportedListMnuBtn" Header="Add to Reported List" Click="addtoReportedListMnuBtn_Click" FontWeight="Black"/>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
当我想从 contexMenu 中单击“addtoReportedListMnuBtn”时,我应该尝试几次来执行它的事件。通常从下面的代码中显示 messageBox
private void addtoReportedListMnuBtn_Click(object sender, RoutedEventArgs e)//add to reported list
{
ObjClass en = (ObjClass)ActiveSignalDataGrid.SelectedItem;
if(en!=null)
{
ReportSignalsListQ.Data = en; // add to queue for adding
}else
{
MessageBox.Show("Please select again");
}
}
解决方案
我会说,DataGrid
在你的情况下, a 是一个错误的地方ContextMenu
。将您的资源放到ContextMenu
窗口的资源中并将其用于DataGridCell
.
<Window.Resources>
<ContextMenu x:Key="contMen" HorizontalContentAlignment="Right" FlowDirection="RightToLeft">
<MenuItem Name="addToBlackListMnuBtn" Header="Add to Black List" Click="addToBlackListMnuBtn_Click" FontWeight="Black"/>
<MenuItem Name="addtoReportedListMnuBtn" Header="Add to Reported List" Click="addtoReportedListMnuBtn_Click" FontWeight="Black"/>
</ContextMenu>
</Window.Resources>
<DataGrid.Resources>
<Style TargetType="DataGridCell">
<Setter Property="ContextMenu" Value="{StaticResource contMen}"/>
</Style>
</DataGrid.Resources>
private void addtoReportedListMnuBtn_Click(object sender, RoutedEventArgs e)//add to reported list
{
var en = (((sender as MenuItem).Parent as ContextMenu).PlacementTarget as DataGridCell).DataContext as ObjClass;
if (en != null)
{
ReportSignalsListQ.Data = en; // add to queue for adding
}
else
{
MessageBox.Show("Please select again");
}
}
推荐阅读
- django - Django:过滤另一行的值
- swift - 如何在 Heroku 上使用 swift 安全地处理 Slack 的 API 令牌?
- node.js - 等待服务响应,然后继续进行?
- vue.js - Vuejs 中的 SlickGrid 和溢出:滚动
- mysql - 查询大量行时创建高效存储过程的问题
- asp.net - 一起返回两个实体框架查询结果
- javascript - 在 Express 中的 app.listen 之前等待异步函数完成
- java - 如何将麦克风权限授予 Java 应用程序(macOS Mojave 及更高版本)?
- automata - 图灵机接受单词“1”可排列成正方形
- spring - 如果我添加 @EnableJpaRepositories 注释,服务类 Autowire 返回 Null