C# synchronize scroll and select of two DataGridViews

简介: 效果图: 同时滚动和选中两个DGV的行。 关键代码: using System; using System.

效果图:

同时滚动和选中两个DGV的行。

image

关键代码:


  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Reflection;
  10. namespace SyncDgvs
  11. {
  12.     public partial class Form1 : Form
  13.     {
  14.         public Form1()
  15.         {
  16.             InitializeComponent();
  17.             fillDatagridview();
  18.         }
  19.         private void fillDatagridview()
  20.         {
  21.             dataGridView1.Rows.Clear();
  22.             dataGridView2.Rows.Clear();
  23.             for (int i = 0; i 100;i++ )
  24.             {
  25.                 dataGridView1.Rows.Add(i,i, i);
  26.                 dataGridView2.Rows.Add(i,i, i);
  27.             }
  28.         }
  29.         private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
  30.         {
  31.             PropertyInfo verticalOffset = dataGridView2.GetType().GetProperty("VerticalOffset", BindingFlags.NonPublic | BindingFlags.Instance);
  32.             verticalOffset.SetValue(this.dataGridView2, dataGridView1.VerticalScrollingOffset, null);
  33.         }
  34.         private void dataGridView2_Scroll(object sender, ScrollEventArgs e)
  35.         {
  36.             PropertyInfo verticalOffset = dataGridView1.GetType().GetProperty("VerticalOffset", BindingFlags.NonPublic | BindingFlags.Instance);
  37.             verticalOffset.SetValue(this.dataGridView1, dataGridView2.VerticalScrollingOffset, null);
  38.         }
  39.         private void dataGridView2_MouseClick(object sender, MouseEventArgs e)
  40.         {
  41.             int iRow = dataGridView2.CurrentRow.Index;
  42.             dataGridView1.ClearSelection();
  43.             dataGridView1.Rows[iRow].Selected = true;
  44.         }
  45.         private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
  46.         {
  47.             int iRow = dataGridView1.CurrentRow.Index;
  48.             dataGridView2.ClearSelection();
  49.             dataGridView2.Rows[iRow].Selected = true;
  50.         }
  51.     }
  52. }


工程代码:

img_e25d4fb2f8de1caf41a735ec53088516.pngSyncDgvs.rar


参考文献:

http://stackoverflow.com/questions/33174898/c-sharp-synchronize-scroll-of-two-datagridviews

相关文章
|
8月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
531 2
|
存储 .NET C#
C# LINQ 详解 From Where Select Group Into OrderBy Let Join
目录 1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. 概述     LINQ的全称是Language Integrated Query,中文译成“语言集成查询”。
2137 0
|
C# 数据库 移动开发
|
Go C# C++
译文---C#堆VS栈(Part Two)
原文:译文---C#堆VS栈(Part Two) 前言          在本系列的第一篇文章《C#堆栈对比(Part One)》中,介绍了堆栈的基本功能和值类型以及引用类型在程序运行时的表现,同时也包含了指针作用的讲解。
1108 0
|
C# 数据库 移动开发
C# DataTable Select用法
使用背景:         完成一个查询,返回一个DataTable后,很多时候都想在查询结果中继续搜索。这时可以使用DataTable.Select方法对结果进行再查询。 DataRow[] dr = ds.Tables[table_name].Select(); DataRow[] dr = ds.Tables[table_name].Select("数据库绑定在gridv
3011 0
|
2月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
47 3
|
29天前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
89 12
|
2月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
84 4
|
4月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
61 2