c# datagridview显示屏幕中的数据 10

如我有个int[]DM=newint[40000];现在我想把这40000个int数组,每个全转为16位的2进制。全部显示到datagridview里面。每一行显示一个i... 如我有个int[] DM=new int[40000];
现在我想把这40000个int数组,每个全转为16位的2进制。全部显示到datagridview里面。每一行显示一个int的二进制。这样datagridview要显示40000行,这样你会发现一个问题,在添加datagridview行的时候,加40000行要加入几分钟,体验效果极差。所以我想实现如下效果:
只加载屏幕显示的内容,如我屏幕中想滚动到第100行,则datagridview加到100,同时加载DM[99]——屏幕显示的行数
展开
 我来答
yinfengnong
2018-01-20 · TA获得超过5619个赞
知道大有可为答主
回答量:2344
采纳率:89%
帮助的人:2305万
展开全部

可以使用 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到底是怎么获取值?我这是多列的,不是一列
而且我是要时刻刷新的数据,这缓存存在实时刷新吗
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式