首页 > 其他分享 >DataGridView控件的显示效率

DataGridView控件的显示效率

时间:2023-05-10 10:13:36浏览次数:31  
标签:控件 System 效率 dataGridView1 dataGridView2 net DataGridView datatable Columns

C#,如何提高DataGridView控件的显示效率?一次要管理100万条记录,如何才能不卡?不仅仅是虚拟模式的问题。

(1)采用virtualmode,不要使用datagridview1.datasource = dt

如何使用虚拟模式,参见https://blog.csdn.net/qq_30122639/article/details/53739607和https://bbs.csdn.net/topics/390948328?list=lz

分为两步:

1)将Accdb加载到datagridview的函数

public void LoadAccdb2Datagridview_Parent_VirtualMode_is_True(string accdbfilenameOpened_, string needTableName_, string resultTableName_, string password, bool IsShowAllGroundPtsDataOrOnlyCentralPts = false)
{
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
watch.Start(); //开始监视代码运行时间;
//需要测试的代码;
this.datatable_1 = new System.Data.DataTable();
this.datatable_2 = new System.Data.DataTable();
this.datatable_1 = MdbProcess.LoadAccdbTable2DataTable(accdbfilenameOpened_, needTableName_, password);
this.datatable_2 = MdbProcess.LoadAccdbTable2DataTable_filter(accdbfilenameOpened_, resultTableName_, password, IsShowAllGroundPtsDataOrOnlyCentralPts);
watch.Stop(); //停止监视
TimeSpan timespan = watch.Elapsed; //获取当前实例测量得出的总时间
System.Diagnostics.Debug.WriteLine("读取数据库执行时间: " + timespan.TotalMilliseconds + "毫秒," + timespan.TotalSeconds + "秒"); //总毫秒数

//

// 给dataGridView增加列;
if (this.dataGridView1.Columns.Count == 0)
{
foreach (System.Data.DataColumn column in this.datatable_1.Columns)
{
this.dataGridView1.Columns.Add(column.ColumnName, column.ColumnName);
}
}
if (this.dataGridView2.Columns.Count == 0)
{
foreach (System.Data.DataColumn column in this.datatable_2.Columns)
{
this.dataGridView2.Columns.Add(column.ColumnName, column.ColumnName);
}
}

//设置颜色

this.dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.Beige;
this.dataGridView2.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.Beige;

//设置VirtualMode为true
if (this.dataGridView1.VirtualMode == false || this.dataGridView2.VirtualMode == false)
{
this.dataGridView1.VirtualMode = true;
this.dataGridView2.VirtualMode = true;
}

//根据datatable设置dataGridView的显示行数,注意,dataGridView的AllowUsertoAddRows要设置成False
this.dataGridView1.RowCount = this.datatable_1.Rows.Count ; // +1 ;
this.dataGridView2.RowCount = this.datatable_2.Rows.Count ; // +1 ;
}

2)dataGridView1_CellValueNeeded()函数

private void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
int colCount = this.dataGridView1.ColumnCount;
int colCount2 = this.dataGridView1.Columns.Count;

if (e.RowIndex == this.dataGridView1.RowCount)
{
return;
}
else
{
//string colName = this.dataGridView1.Columns[e.ColumnIndex].Name;
//e.Value = this.datatable_1.Rows[e.RowIndex][colName].ToString();

//或者
e.Value = this.datatable_1.Rows[e.RowIndex][e.ColumnIndex].ToString();
}

}

 

(2)将datagridview1的AutoSizeColumnsMode和AutoSizeRowsMode属性都设置为None

C# 中的datagridview显示过慢的原因之一

Datagridview操作性能慢的问题

用datagridview绑定数据源,第一列是一个checkbox,用于标志是否选中。当光标点到这行时自动选中这个checkbox,并且提供全选与取消全选的功能,这本是一个很简单的功能,但出现的问题是,鼠标点中行时,自动勾选checkbox,给checkbox赋值的速度相当慢,全选和取消全选更不用说,几十行就慢得不行,更别说上百行上千行的数据,没半小时都别想循环完.

最后找出问题所在,Datagridview的AutoSizeColumnsMode!

不能把这个属性的值设置成Allcells****,否则将导致操作datagridview数据变得极慢.可以考虑换成displayedcells**,有相同的视觉效果,速度很快.

可惜不知道怎样调试到datagridview内部去,真想去看个究竟,这datagridview到底干了些啥事.

希望给搜索到这篇的朋友一个提醒.
---------------------
作者:三断笛
来源:CSDN
原文:https://blog.csdn.net/xxyj6450/article/details/9051011
版权声明:本文为博主原创文章,转载请附上博文链接!

(3) 将RowHeadersWidthSizeMode和ColumnHeadersHeightSizeMode属性设为DisableResizing(用户不能使用鼠标调整列标头的宽度)/EnableResizing(用户可以使用鼠标调整列标头的宽度),如果要显示行号,可以将RowHeadersWidthSizeMode设置为AutoSizeToFirstHeader

https://blog.csdn.net/weixin_34116110/article/details/85448837

严重影响DataGridView性能的2个属性

C# DataGridView显示行号的三种方法

https://blog.csdn.net/chenpeng0118/article/details/7402199
————————————————
版权声明:本文为CSDN博主「jadesl13」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bowangting/article/details/88535879

标签:控件,System,效率,dataGridView1,dataGridView2,net,DataGridView,datatable,Columns
From: https://www.cnblogs.com/clx150401/p/17387141.html

相关文章

  • 小程序开发中的插件、组件、控件到底有什么区别?
    ​小程序插件代码由一些自定义组件和JS代码文件构成,插件开发者在发布插件时,这些代码被上传到后台保存起来。当小程序使用插件时,使用者需填写插件的AppID和版本号,就可从后台获取相应的插件代码。小程序代码编译时,插件代码会被嵌入到小程序中,与小程序一起编译运行。由于在小......
  • 界面控件DevExtreme使用指南 - 控制折叠操作 & 键盘支持
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序,该套件附带功能齐全的数据网格、交互式图表小部件、数据编辑器等。请注意:在开始本教程之前,请确保DevExtreme已安装在Angula......
  • 如何提高团队协作办公效率?
    在现代企业,想要完成一个大型项目,需要一个团队的共同努力,每位团队成员都发挥自己最大的能量,才能够达到预期的效果。不过对于很多团队来说,在协作办公的过程中会遇到很多问题,例如团队成员之间沟通不畅、缺乏信任、信息不互通、任务分配不当、对接有误等,这些问题都会影响到团队协作办......
  • quantumPLC与南京德宏数采仪通讯,citect画面日期时间控件和复选框控件控制趋势交互功能
    这一篇笔记我在新浪博客记录过,在这里也记录一遍,新浪博客地址quantumPLC与南京德宏数采仪通讯,citect画面日期时间控件和复选框控件控制趋势交互功能_来自金沙江的小鱼_新浪博客(sina.com.cn)最近上级管理部门要求在现场生产控制计算机上新建一幅画面,生产关键参数趋势、环保监测数......
  • 分享一个提高运维效率的 Python 脚本
    哈喽大家好我是咸鱼,今天给大家分享一个能够提升运维效率的python脚本咸鱼平常在工作当中通常会接触到下面类似的场景:容灾切换的时候批量对机器上的配置文件内容进行修改替换对机器批量替换某个文件中的字段对于Linux机器,咸鱼可以写个shell脚本或者直接批量使用sed命......
  • C# 窗体控件ContextMenuStrip下拉项之间的分割线
    1.效果如图: 2.选中ContextMenuStrip控件,在Items属性中添加Separator 3. (其中第3,4步,通过上下箭头,摆置好你要分割的位置)原文链接......
  • Win32 SDK TreeView 控件的基本用法,节点的编辑,拖动,添加,删除,弹出菜单
    TreeView控件老是用的稀里糊涂的,写个测试程序总结一下基本用法要注意的是控件是发通知给父窗口处理,因此消息中鼠标的坐标不是相对控件的,要从屏幕坐标转换来。程序是WIN32SDK向导生成的C语言框架。树的操作定义成一个类。 微软网站上TreeView_XXX宏的说明文档好多错误,应该是......
  • 线程的五种状态 jvm 看100%cpu, 是堆内存还是元空间还是gc的效率过低,
        ......
  • 自学c#基础第六课,常用控件label
    labellabel和linklabel控件,主要是设置里面可见属性、字体什么的,linklabel的话有点中后下划线样式LinkBehaviorlistbox主要介绍了里面的方法//清除listBox1列表//listBox1.Items.Clear();//添加listBox1元素//listBox1.......
  • 第6-1讲,Listbox 列表框控件
    Listbox列表框控件在与用户交互的过程成中,如果需要用户自己做出选择,可以使用列表框控件.importtkinterastk#创建一个窗口window=tk.Tk()#创建窗口的标题window.title("listbox")#设置窗口的大小window.geometry('500x400')#设置窗体的图标window.iconbitmap('../......