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

相关文章
|
6月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
351 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,中文译成“语言集成查询”。
2119 0
|
C# 数据库 移动开发
|
Go C# C++
译文---C#堆VS栈(Part Two)
原文:译文---C#堆VS栈(Part Two) 前言          在本系列的第一篇文章《C#堆栈对比(Part One)》中,介绍了堆栈的基本功能和值类型以及引用类型在程序运行时的表现,同时也包含了指针作用的讲解。
1096 0
|
C# 数据库 移动开发
C# DataTable Select用法
使用背景:         完成一个查询,返回一个DataTable后,很多时候都想在查询结果中继续搜索。这时可以使用DataTable.Select方法对结果进行再查询。 DataRow[] dr = ds.Tables[table_name].Select(); DataRow[] dr = ds.Tables[table_name].Select("数据库绑定在gridv
2961 0
|
6月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
192 3
|
6月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
199 3
|
15天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
29 3
|
1月前
|
安全 C# 数据安全/隐私保护
实现C#编程文件夹加锁保护
【10月更文挑战第16天】本文介绍了两种用 C# 实现文件夹保护的方法:一是通过设置文件系统权限,阻止普通用户访问;二是使用加密技术,对文件夹中的文件进行加密,防止未授权访问。提供了示例代码和使用方法,适用于不同安全需求的场景。
104 0