养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

C#用dataGridView显示大数据

时间:2024-10-28 07:30:17

C#.net中当显示数据时,一般都会选用dataGridView显示数据,然而当显示的数据量比较大时,十几万甚至几十万上百万时dataGridView就会变得特别卡,本人只是针对使用dataGridView显示大数据时,如何优化卡顿现象。

工具/原料

VS2010或VS2012开发环境

C#.net中dataGridView

方法/步骤

1、1.嚼但匙噻首先新建一个dataGridView的字段列,列名为序号:DataGridViewColumncolum荏鱿胫协n=newDataGridViewTextBoxColumn();column.Name="序号";column.HeaderText="序号";column.DefaultCellStyle.BackColor=Color.FromArgb(212,208,200);column.SortMode=DataGridViewColumnSortMode.Programmatic;//让序号列自然排序,即从1开始从小到大column.ReadOnly=true;this.m_dataGridView.Columns.Add(column);//this.m_dataGridView是示例中的dataGridView控件对象

2、2.开启dataGridView的虚拟模式(dataGridView自带的虚拟模式,是专门针对大数据显示的,很方便,但也有缺点,后面再说。这块代码放在设置“序号”列之后即可。)。this.m_dataGridView.VirtualMode=true;//开启虚拟模式this.m_dataGridView.RowCount=**;//设置dataGridView所要显示的数据总量

3、3.虚拟模式调用(找到dataGridView的CellValueNeeded方法,双击)privatevoidm_dataGridView_CellValueNeeded(objectsender,DataGridViewCellValueEventArgse)

4、4.虚拟模式倦虺赳式具体调用显示数据(此段代码加在虚拟模式方法中)stringcolName=this.m_dataGridView.Columns[e.ColumnIndex].Name;//缥熹嵛郦读取单元格对应的列名称if(colName.Equals(“序号”))//如果单元格的名称等于序号列,则此单元格的值+1{e.Value=e.RowIndex+1;}else{oRst.MoveTo(e.RowIndex+1);//oRst是表示数据集或记录集即你的数据源,然后移动到当前行。e.Value=oRst.GetFieldValueText(colName);//oRst通过列名提取数据集或记录集里的数据,赋值给当前的单元格}

5、5.补充dataGridView的虚拟模式的解释:所谓虚拟模式,就是当前显示范围内的数据,dataGridView分为一个个单元格,一直从数据源中读取,并且不断地刷新当前的界面。这样的话,如果数据源是数据库等物理层面的数据来源,那么就意味着dataGridView当前显示的数据界面,哪怕你不动,不查看其他数据,它依旧时刻不停地访问物理层面,或多或少有点儿浪费资源。好了,划重点,下面提供思路了,一种是把当前界面显示的数据作为缓存,另一种则是把当前界面的数据存在一个容器里,可以是dataTable,当dataGridView刷新数据时,则优先从缓存或dataTable里提取数据,如果没有再从数据源提取,可以提高那么一丁点儿的效率。

© 一点知识