DataGrid后台实现选中某一行,并滚动到当前选中项

2023-11-13

定义一个DataGrid

   <DataGrid  Name="resultDataGrid"
                           VirtualizingStackPanel.IsVirtualizing="False"
                                                   AlternationCount="2" 
                                                   BorderThickness="1"
                                                   AutoGenerateColumns="False" 
                                                   CanUserAddRows="False" 
                                                   CanUserReorderColumns="False" 
                                                   CanUserResizeColumns="False" 
                                                   CanUserResizeRows="False" 
                                                   CanUserSortColumns="False"
                                                   HorizontalAlignment="Left" 
                                                   IsReadOnly="False"
                                                   ItemsSource="{Binding                                 DetectResultList,Mode=TwoWay}"
                                                   GridLinesVisibility="All"
                                                   SelectionMode="Single" >
                    <DataGrid.Columns>
                        <DataGridTextColumn Binding="{Binding ID}"  ElementStyle="{StaticResource dgCell}" Header="ID" Width="40" IsReadOnly="True" />
                    <DataGridTextColumn Binding="{Binding Pedestal_Row}"  ElementStyle="{StaticResource dgCell}" Header="x" Width="*" />
                    <DataGridTextColumn Binding="{Binding Pedestal_Col}"  ElementStyle="{StaticResource dgCell}" Header="y" Width="*" />
                    <DataGridTextColumn Binding="{Binding ErrDiscription}"  ElementStyle="{StaticResource dgCell}" Header="缺陷描述 " Width="4*" />
                    </DataGrid.Columns>
                   
                </DataGrid>

注意:  一定要设置VirtualizingStackPanel.IsVirtualizing="False"

/// <summary>
        /// 将SelectedItem滚动为第一行
        /// </summary>
        /// <param name="dataGrid">目标DagaGrid</param>
        /// <param name="selectedItem">选中项</param>
        public static void SetSelectedItemFirstRow(object dataGrid, object selectedItem)
        {
            //若目标datagrid为空,抛出异常
            if (dataGrid == null)
            {
                throw new ArgumentNullException("目标无" + dataGrid + "无法转换为DataGrid");
            }
            //获取目标DataGrid,为空则抛出异常
            System.Windows.Controls.DataGrid dg = dataGrid as System.Windows.Controls.DataGrid;
            if (dg == null)
            {
                throw new ArgumentNullException("目标无" + dataGrid + "无法转换为DataGrid");
            }
            //数据源为空则返回
            if (dg.Items == null || dg.Items.Count < 1)
            {
                return;
            }

            //获取焦点,滚动为目标行
            dg.Focus();
            dg.SelectedItem = selectedItem;
            dg.CurrentColumn = dg.Columns[0];
            dg.ScrollIntoView(dg.SelectedItem, dg.CurrentColumn);
        }


        /// <summary>
        /// 获取选中的行
        /// </summary>
        /// <param name="datagrid"></param>
        /// <param name="rowIndex"></param>
        /// <returns></returns>
        public static DataGridRow GetDataGridRow(DataGrid datagrid, int rowIndex)
        {
            DataGridRow row = (DataGridRow)datagrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);
            if (row == null)
            {
                datagrid.UpdateLayout();

                row = (DataGridRow)datagrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);
                row.IsSelected = true;
            }
            return row;
        }

在代码中使用这两个函数

resultDataGrid.SelectedItem = item;
                    DataGridRow resRow = GetDataGridRow(resultDataGrid, (int)item.ID);
                    resRow.IsSelected = true;
                    SetSelectedItemFirstRow(resultDataGrid,resultDataGrid.SelectedItem);
                    resultDataGrid.UpdateLayout();

参考:

https://bbs.csdn.net/topics/392174816?page=1

https://blog.csdn.net/u012559285/article/details/51508742

https://blog.csdn.net/jslink_l/article/details/75308349

https://blog.csdn.net/jiuzaizuotian2014/article/details/81661809?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DataGrid后台实现选中某一行,并滚动到当前选中项 的相关文章

  • 通过 RDP 使用 WPF 的 Direct2d

    我正在开发一个 C 应用程序 它使用 SharpDx 通过 Direct2d 渲染地图 该地图与 D3DImage 一起显示在 WPF 主机上 在本地计算机上 一切正常 但当我尝试通过远程桌面连接时 D3DImage 会丢失其后备缓冲区 并
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • 现代 UI WPF 导航

    我正在使用现代 ui wpf 并尝试从 CheckLogin xaml 页面导航到 MainWindow xaml 页面 它们位于解决方案根目录中 我在 CheckLogin xaml 中写了这样的内容 BBCodeBlock bbBloc
  • 将字符串数组添加到组合框

    我有一个组合框 我想加载一个从方法返回的字符串数组 我目前只是用 for 循环加载它 但我认为应该可以将字符串数组直接分配给组合框 我只是想改进我的代码 我已经做了一些搜索 并且看到了使用数据范围或数据源的答案 但这些似乎都不起作用 我也尝
  • 调用异步方法在视图模型的构造函数中加载数据有警告

    我的视图包含一个 ListView 它显示来自互联网的一些数据 我创建一个异步方法来加载数据并在我的视图模型的构造函数中调用该方法 它有一个警告提示我现在使用await关键字 还有其他解决方案可以在构造函数中异步加载数据吗 有几种可以应用的
  • WPF 中的 IWin32Window

    我有一个 excel AddIn 它公开 IWin32Window 作为它的主 UI 我想显示一个使用它作为父窗口的 WPF 窗口 我该如何去做呢 您可以使用窗口互操作助手 http msdn microsoft com en us lib
  • 仅最后一个用户控件显示内容控件

    我有一个奇怪的问题 我创建了一个带有标签和画布的用户控件 画布引用资源 但画布仅显示在我的堆栈面板中的最后一个控件上 这是我的窗户
  • 如何在 XAML 和 C# 中将字符串列表显示为 DataGrid(表)

    我已经在 SO 上潜伏了很长时间 直到最近才决定建立一个帐户 我花了很多时间试图解决这个我一直没有询问的问题 但我就在这里 我正在努力实现的目标 我有一个字符串列表 例如 Mango Banana Melon 我们称之为水果 我想将其显示为
  • 尝试在 Expression-Blend 4 中打开在 Visual Studio 2010 中创建的 WPF 项目时出现问题

    我在 VS 2010 中创建 WPF 项目 在完成功能性 GUI 的工作后 我想在 Blend 4 中编辑控件模板 但是当我在 Blend 中以 DesignMode 打开项目时 他告诉我 无效的 XAML 在结果窗口中他写道 Window
  • WPF - 普通 [标签:输入] 控制的最佳实践

    我想知道 这是在 WPF 中获取众所周知的标签输入 或输出 无关紧要 组合的最佳和最快的方法 这是一个简单的任务 只需考虑 对象 ME 的快速输出 名字 克里斯蒂安 年龄 28 心情 好 我知道 我可以使用带有文本块的网格 但说实话 这个
  • 如何提高Canvas渲染性能?

    我必须画很多Shape http msdn microsoft com en us library system windows shapes shape aspx 约 1 20 万 作为 Canvas 2 的子级 我在 WPF 应用程序中
  • 拖动 Window 时无法可靠地调用 LocationChanged

    为了实现对接 我依靠监听 Window LocationChanged 事件来检测在屏幕上拖动的窗口的位置变化 但一位用户报告说 对接在他们的机器上无法工作 事实证明 他们在 Windows 性能选项中禁用了 拖动时显示窗口内容 因此只有在
  • 根据值更改 DataGrid 单元格颜色

    我有一个 WPF 数据网格 我想要根据值使用不同的单元格颜色 我的 xaml 上有以下代码 Style TargetType DataGridCell 但不是只选择一个单元格而是选择所有行 我缺少什么 如果您尝试设置DataGrid Cel
  • OpenGL:顶点越多,性能越慢

    我正在开发一个程序的一部分 其中给定 xyz 坐标集合 制作 3D 模型 我已经完成了这张图片所需的所有功能 即平移 旋转 缩放 但是给出的 xyz 坐标越多 程序运行速度就越慢 我的程序在处理 29 000 个坐标时运行得非常流畅 但当我
  • MVVM ViewModel 很多属性

    我是 MVVM 新手 正在开发一个应用程序 我有一个包含很多属性的表单视图 大约 50 个 我不能将它们分离到用户控件中 因为这会破坏 mvvm 原则 我无法将它们分成模型 因为它们包含逻辑 属性更改 错误更改这些都不是 poco 类 并且
  • WPF 简单绑定到对象属性

    我在 wpf xaml 中绑定时遇到一些问题 有这个简单的文件
  • 如何绑定到 DynamicResource 以便可以使用 Converter 或 StringFormat 等? (修订版4)

    注意 这是对早期设计的修订 该设计具有无法在某种样式中使用的限制 从而大大削弱了其有效性 然而 这个新版本现在可以使用样式 本质上是让您可以在任何可以使用绑定或动态资源的地方使用它并获得预期的结果 从而使其更加有用 从技术上讲 这不是一个问
  • WPF XAML 定义的 MenuItem 重用开始工作,然后消失

    以下简单代码尝试在两个单独的菜单上重用 Window Resources 中定义的 MenuItem
  • WPF 3D - 在复杂几何体上映射渐变画笔

    我想问是否有人知道如何在 WPF 3D 中的复杂对象上映射渐变画笔 结果应该类似于 matlab 中的 3D 图像 例如 3D 函数 假设您有一些想要可视化的 3 维数据 并且想要通过颜色区分某些级别的值 给定一个 GradientBrus
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多

随机推荐

  • sql developer使用技巧,快捷键

    PL SQL Developer使用技巧 快捷键 1 类SQL PLUS窗口 File gt New gt Command Window 这个类似于oracle的客户端工具sql plus 但比它好用多了 2 设置关键字自动大写 Tools
  • python异常

    一 什么是异常 异常是一个事件 该事件会在程序执行过程中发生 会影响程序的正常运行 一般情况下 python无法正常处理一个异常 会导致程序中断 在出现异常时 为了不影响程序的正常运行 我们需要捕获异常 在python中异常是一个对象 表示
  • UE4 C++创建继承于UEditorSubsystem类时报错

    使用UEditorSubsystem需要在Build cs里加上EditorSubsystem模块的引用 因为这是编辑器模块 if Target bBuildEditor PublicDependencyModuleNames AddRan
  • 人工智能在电力系统中的应用前景怎么样

    人工智能在电力系统中的应用现状 随着人工智能技术的兴起 人工智能技术应用在电力系统的运行 控制 管理等领域 人工智能技术在电力系统中的应用不仅拓展了人工智能技术的应用范围 而且扩展了人工智能技术凭借自动化和智能化程度高等优势 提升了电力产业
  • cmake:cmake-buildsystem

    介绍 基于cmake的构建系统被组织为一组高级逻辑目标 每个目标对应于一个可执行文件或者库 或者是一个包含自定义命令的自定义目标 目标之间的依赖关系在buildsystem中表示 以确定生成顺序和响应更改的重新生成规则 二进制目标 可执行文
  • 为什么要软件测试?测试可追溯性会带来什么改变?

    我们为什么要软件测试 测试证明我们的应用程序运行正常 可追溯性 或能够将需求追踪到测试用例 构成了测试策略的基础 测试可追溯性是将测试链接到一组需求并验证应用程序是否按预期工作的能力 当你的产品规模扩大时 可追溯性很重要 当你的应用很小的时
  • 使用VS2019开发和调试Linux程序

    文章目录 一 前言 二 安装vs2019环境 三 步骤 1 创建项目 2 配置工程属性 3 编译工程 4 启动程序 四 CMAKE 1 步骤 总结 一 前言 目前 越来越多的项目有需求在Linux平台上编译运行 为了兼容windows程序员
  • # 关于conda install 和conda create 环境安装包的网络配置相关问题解决

    关于conda install 和conda create 环境安装包的网络配置相关问题解决 问题 CondaHTTPError HTTP 000 CONNECTION FAILED for url 1 问题主要描述 2 换国内源的解决方案
  • MFC 当列表控件为Report报表形式时,怎样实现修改表格数据

    声明 本文例子是双击任意位置处的表格数据 实现对当前位置的单元格数据进行修改 1 首先是实现在列表控件中显示表格数据 具体代码这里不描述 显示效果如下图 2 现要实现如声明所说的功能 就是双击某个单元格弹出一个对话框输入新值 再用新值去替换
  • 沃通SSL证书、国密SSL证书、IPSSL证书,2023中秋国庆双节钜惠

    2023中秋国庆喜相逢 沃通CA特此推出 迎中秋 庆国庆 沃通SSL证书双节钜惠 活动 即日起至2023年10月18日 沃通SSL证书 国密SSL证书 IP SSL证书等多款热销SSL证书产品优惠来袭 沃通全球信任SSL证书 助力数据安全保
  • centos7 安装ftp,虚拟用户模式

    记得需要先 systemctl stop firewalld 关闭防火墙 setenforce 0 关闭selinux 安装ftp yum y install vsftpd 先备份文件 cp etc vsftpd vsftpd conf e
  • MatConvnet工具箱使用手册翻译理解一

    转载自 http blog csdn net enjolras fuu article details 53676046 概述 MatConvNet是用于MATLAB的卷积神经网络 CNN 的实现 工具箱的设计注重简单性和灵活性 它将CNN
  • 全新链游【恐龙世界/侏罗纪】游恐龙世界NFT链游区块链上链质押盲盒NFT游戏PK对战

    恐龙世界 一 项目介绍 名称 等级 狩猎值 攻击力 暴龙 SR 350 300 霸王龙 R 300 200 三角龙 A 250 150 剑龙 B 200 120 雷龙 C 100 100 每一只恐龙都有饥饿值 进行狩猎会减少饥饿值 没有饥饿
  • ubuntu 打开mysql配置文件_ubuntu下修改MySQL的配置文件my.cnf

    先sudo su转换成root 再用cd转到 etc mysql目录下 用chmod修改权限 chmod 755 my cnf 但这样还不能修改 再用vi命令 sudo vi my cnf 通过上下方向键将光标移到 client 下面的空行
  • 转录因子分析预测 cistrome db

    Toolkit for CistromeDBhttp dbtoolkit cistrome org 基因表达调控系列问题汇总 持续更新 知乎 zhihu com
  • CCF C³-23@阿里妈妈:数智商业技术丨开始报名

    CCF C 活动第二十三期主题是 数智商业技术 将于2023年9月14日周四 18 00 21 30 在北京市朝阳区阿里中心望京A座阿里妈妈举行 报名从速 2023年 可以说是属于生成式AI大模型的一年 从去年年底持续到现在的 以生成式AI
  • CVE-2023-23752:Joomla未授权访问漏洞复现

    CVE 2023 23752 Joomla未授权访问漏洞复现 前言 本次测试仅供学习使用 如若非法他用 与本文作者无关 需自行负责 一 Openfire简介 Joomla是一个免费的开源内容管理系统 CMS 允许用户构建网站和在线应用程序
  • VUE React Angular

    Typescript ES6 ES5 React 专注于使用 Javascript ES6 Vue 使用 Javascript ES5 或 ES6 Angular 依赖于 TypeScript 模板 JSX 还是 HTML React JS
  • 厉害,被马赛克的图片竟然还可以恢复

    文章首发于微信公众号 GitHub 精选 欢迎大家关注 大家好 我是章鱼猫 其实之前在我用马赛克对图片进行模糊处理的时候 我就思考过这个问题 这些被马赛克的地方能不能被恢复出来 万一能恢复 当时就觉得细思极恐 你说巧不巧还真能恢复 在介绍今
  • DataGrid后台实现选中某一行,并滚动到当前选中项

    定义一个DataGrid