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

相关文章
|
3月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
152 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,中文译成“语言集成查询”。
2040 0
|
C# 数据库 移动开发
|
Go C# C++
译文---C#堆VS栈(Part Two)
原文:译文---C#堆VS栈(Part Two) 前言          在本系列的第一篇文章《C#堆栈对比(Part One)》中,介绍了堆栈的基本功能和值类型以及引用类型在程序运行时的表现,同时也包含了指针作用的讲解。
1083 0
|
C# 数据库 移动开发
C# DataTable Select用法
使用背景:         完成一个查询,返回一个DataTable后,很多时候都想在查询结果中继续搜索。这时可以使用DataTable.Select方法对结果进行再查询。 DataRow[] dr = ds.Tables[table_name].Select(); DataRow[] dr = ds.Tables[table_name].Select("数据库绑定在gridv
2863 0
|
3月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
150 3
|
3月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
162 3
|
15天前
|
存储 C#
揭秘C#.Net编程秘宝:结构体类型Struct,让你的数据结构秒变高效战斗机,编程界的新星就是你!
【8月更文挑战第4天】在C#编程中,结构体(`struct`)是一种整合多种数据类型的复合数据类型。与类不同,结构体是值类型,意味着数据被直接复制而非引用。这使其适合表示小型、固定的数据结构如点坐标。结构体默认私有成员且不可变,除非明确指定。通过`struct`关键字定义,可以包含字段、构造函数及方法。例如,定义一个表示二维点的结构体,并实现计算距离原点的方法。使用时如同普通类型,可通过实例化并调用其成员。设计时推荐保持结构体不可变以避免副作用,并注意装箱拆箱可能导致的性能影响。掌握结构体有助于构建高效的应用程序。
39 7
|
1天前
|
安全 C# 开发者
【C# 多线程编程陷阱揭秘】:小心!那些让你的程序瞬间崩溃的多线程数据同步异常问题,看完这篇你就能轻松应对!
【8月更文挑战第18天】多线程编程对现代软件开发至关重要,特别是在追求高性能和响应性方面。然而,它也带来了数据同步异常等挑战。本文通过一个简单的计数器示例展示了当多个线程无序地访问共享资源时可能出现的问题,并介绍了如何使用 `lock` 语句来确保线程安全。此外,还提到了其他同步工具如 `Monitor` 和 `Semaphore`,帮助开发者实现更高效的数据同步策略,以达到既保证数据一致性又维持良好性能的目标。
4 0