c# datagridview显示屏幕中的数据

如我有个int[] DM=new int[40000];
现在我想把这40000个int数组,每个全转为16位的2进制。全部显示到datagridview里面。每一行显示一个int的二进制。这样datagridview要显示40000行,这样你会发现一个问题,在添加datagridview行的时候,加40000行要加入几分钟,体验效果极差。所以我想实现如下效果:
只加载屏幕显示的内容,如我屏幕中想滚动到第100行,则datagridview加到100,同时加载DM[99]——屏幕显示的行数

可以使用 DataGridView 的虚拟模式,按需要加载数据,实现DataGridView 虚拟模式需要设置 VirtualMode 为 true ,然后处理 CellValueNeeded 事件。

具体代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DataGridViewVirtualMode
{
public partial class Form1 : Form
{
int[] DM;

public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
DM = new int[40000];

// åˆå§‹åŒ– 40000 ä¸ª int æ•°æ®
for (int i = 0; i < DM.Length; i++)
{
DM[i] = i;
}

// è®¾ç½®è™šæ‹Ÿæ¨¡å¼
this.dataGridView1.VirtualMode = true;

// è®¾ç½®è¡Œæ•°
this.dataGridView1.RowCount = DM.Length + 1;
}


private void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
if (e.RowIndex == this.dataGridView1.RowCount)
{
return;
}

e.Value = ConverToBinary(DM[e.RowIndex]);
}

/// <summary>
/// å°†int数据转换为16位的二进制
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private string ConverToBinary(int value)
{
return Convert.ToString(value, 2).PadLeft(20, '0');
}
}
}

运行结果:

追问

VirtualMode 这个很强大,我试过了,快速很多。但是我想请问那个e.value到底是怎么获取值?我这是多列的,不是一列

而且我是要时刻刷新的数据,这缓存存在实时刷新吗

好像不给他焦点或者不滚动,他都不会刷新

追答

刷新用DataGridView的Refresh方法

温馨提示:内容为网友见解,仅供参考
无其他回答

C#中能不能用datagridview显示文件的内容?不用数据库
datagridview是绑定控件,文件内容数据被绑定后是可以显示并可以通过代码进行修改。绑定指的是数据库,XML,或者把值赋给DATATABLE,LIST<>等这些数据类型,在绑定到datagridview控件上那么都是可以显示的。如果你是想在datagridview的模板中自定义添加控件并手动赋值的话,是无法显示的,这个是绑定控件的一个...

c#中如何让数据显示在dataGridView上
\/\/SqlDataReader aa = cmd.ExecuteReader();\/\/返回datareader值 \/\/DataTable aaa = new DataTable();\/\/显示在表中 \/\/aaa.Load(aa); \/\/装载数据 \/\/dataGridView1.DataSource = aaa;or \/\/DataSet ds = new DataSet(); \/\/读出数据后就和数据库断了 耗资源 \/\/SqlDataAdapter adp = new ...

c#用dataGridView读取数据时如何只显示有内容的表格,不显示最后一行的空...
左边的:RowHeadersVisible设为false 下面的:AllowUserToAddRow设为false

c# 怎么将datagridview表中的数据打印预览,求代码,不要敷衍我亲们,求真...
private void vB2008Print1_PrintDocument() { vB2008Print1.NewPage(); \/\/vB2008Print1.PrintDGV(datagridview控件名称,字体字号,排列方式,边框默认1111为四边都显示,自动适应宽度,自动适应高度,最小显示字号,是否显示面页标题,是否打印背景色,标题风格,副标题风格,自适应,树状) ...

C#中如何控制DataGridView数据显示,例:数据为123456.78,显示为12....
两种方法:1、Sql查询时即做处理;2、dataset填充datagridview后遍历转换。第一种方法效率高;第二种方法直接。

C#编写的一个界面 怎样实现dataGridView1里的内容在上面显示?
dataGridView1控件有点击行事件,你对着dataGridView1右键属性,然后找到行事件那里然后就可以在行里面获取该行数据,然后赋值到你对应的textbox。如下代码:private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e){ if (this.dataGridView1.SelectedRows != null && this.dat...

c# dataGridView 一行一行显示数据库内容怎么做
DataGridViewRow dr=new DataGridViewRow ();foreach(DataGridViewColumn c in dataGridView1.Columns){ dr.Cells.Add(c.CellTemplate.Clone() as DataGridViewCell);} dr.Cells[0].Value = 内容;dr.Cells[1].Value = 内容;dr.Cells[2].Value = 内容;dr.Cells[3].Value = 内容;dataGridView...

C#中我想在程序初始化页面的时候,DataGridView显示上次保存的所有数据...
是winform程序还是web?winform的话在你的主窗口构造函数中写就可以, 类似这个:public Form1(){ InitializeComponent();\/\/在这里写你的初始化代码 } 如果是web程序的话,那么就在你的页面Page_load方法里面写上初始化代码即可。

C# winfrom 添加数据,然后datagridview显示数据
首先把数据查出来放到DataTable 中 让后绑定一下DataGridView的数据就行了 DataTable dt = SqlHelper.ExecuteDataset(con, CommandType.Text, sql, p.ToArray()).Tables[0];DataGridView1.DataSource = dt;

c#怎样选择treeview子节点后在datagridview中显示对应的数据?
Nodes获得节点的值,或对应的值,然后把值封装到集合对象。然后循环改集合对象将数据加到datagriview中,或者直接点出datagriview的datasourece将集合赋给datagriview

相似回答