为了账号安全,请及时绑定邮箱和手机立即绑定

DataGrid 中选定的行已丢失

DataGrid 中选定的行已丢失

C#
慕妹3242003 2023-07-23 16:50:22
我有一个 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”时,我应该尝试几次来执行其事件。通常通过下面的代码显示消息框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");        }    }   
查看完整描述

2 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

我想说,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");

    }

}


查看完整回答
反对 回复 2023-07-23
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

当您ItemSource更新时,SelectedItem您的信息DataGrid将被清除。SelectionChanged因此,您可以向您添加一个事件DataGrid,并且需要将您分配SelectedItem给代码隐藏中的局部变量,然后将局部变量添加到第二个DataGrid



查看完整回答
反对 回复 2023-07-23
  • 2 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信