大果子你说谁呢 2023-11-14 16:52 采纳率: 33.3%
浏览 16

WPF DataGrid点击某单元格时多行选择,右击操作弹出新窗口,并带入多行数据显示在新窗口

WPF DataGrid点击某单元格时多行选择,选择5行(遇到某行含有特殊字符则过滤),右击操作弹出新窗口,并把这五行数据带入显示在新窗口

XMAL代码
       <DockPanel>
            <StackPanel Orientation ="Horizontal">
                <DataGrid x:Name="DataGridLists" DockPanel.Dock="Left" AutoGenerateColumns = "False" FontSize="14" Width="1000" SelectedCellsChanged="DataGridName_SelectedCellsChanged"   >
                    <DataGrid.Columns>
                        <DataGridTextColumn IsReadOnly="True" Width="200" Header = "ItemOne"  Binding = "{Binding ItemOne}" />
                        <DataGridTextColumn IsReadOnly="True" Width="200" Header = "ItemTwo"  Binding = "{Binding ItemTwo}" />
                        <DataGridTextColumn IsReadOnly="True" Width="200" Header = "ItemThree" Binding = "{Binding ItemThree}" />
                        <DataGridTextColumn IsReadOnly="True" Width="200" Header = "ItemFour" Binding = "{Binding ItemFour}" />
                    </DataGrid.Columns>
                    <DataGrid.CellStyle>
                        <Style TargetType="{x:Type DataGridCell}">
                            <EventSetter Event="MouseDoubleClick" Handler="DataGridName_MouseDoubleClick"/>
                            <Setter Property="HorizontalAlignment" Value="Center" />
                        </Style>
                    </DataGrid.CellStyle>
                </DataGrid>
            </StackPanel>
        </DockPanel>

后端代码
private void DataGridName_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
        {
            // 获取选中单元格所在的行号
            int rowIndex = DataGridLists.Items.IndexOf(DataGridLists.CurrentItem);
            DataGridCell cell = sender as DataGridCell;
            // 如果行号小于5,则从第一行开始选中5行
            if (rowIndex < 5)
            {
                DataGridLists.SelectedCellsChanged -= DataGridName_SelectedCellsChanged; // 取消事件处理程序
                DataGridLists.SelectedItems.Clear();
                for (int i = 0; i < 5; i++)
                {
                    DataGridRow selectedRow = (DataGridRow)DataGridLists.ItemContainerGenerator.ContainerFromIndex(i);
                    if (selectedRow != null)
                    {
                        selectedRow.IsSelected = true;
                    }
                    DataGridLists.SelectedItems.Add(DataGridLists.Items[i]);
                }
                // 弹出新窗口
                NewWindow obj = new NewWindow();
                obj.Show();
                DataGridLists.SelectedCellsChanged += DataGridName_SelectedCellsChanged; // 重新启用事件处理程序
            }
            // 如果行号大于等于5,则选中当前行和前4行
            else
            {
                DataGridLists.SelectedCellsChanged -= DataGridName_SelectedCellsChanged; // 取消事件处理程序
                DataGridLists.SelectedItems.Clear();
                for (int i = rowIndex - 4; i <= rowIndex; i++)
                {
                    DataGridLists.SelectedItems.Add(DataGridLists.Items[i]);
                }
                DataGridLists.SelectedCellsChanged += DataGridName_SelectedCellsChanged; // 重新启用事件处理程序
            }
            // 过滤特殊字符
            foreach (var item in DataGridLists.SelectedItems)
            {
                for (int i = 0; i < DataGridLists.Columns.Count; i++)
                {
                    string value = (DataGridLists.Columns[i].GetCellContent(item) as TextBlock).Text;
                    if (value.Contains("xxx"))
                    {
                        DataGridLists.SelectedItems.Remove(item);
                        break;
                    }
                }
            }
        }
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-15 05:02
    关注

    【相关推荐】




    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月14日

悬赏问题

  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战