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]——屏幕显示的行数 展开
现在我想把这40000个int数组,每个全转为16位的2进制。全部显示到datagridview里面。每一行显示一个int的二进制。这样datagridview要显示40000行,这样你会发现一个问题,在添加datagridview行的时候,加40000行要加入几分钟,体验效果极差。所以我想实现如下效果:
只加载屏幕显示的内容,如我屏幕中想滚动到第100行,则datagridview加到100,同时加载DM[99]——屏幕显示的行数 展开
1个回答
展开全部
可以使用 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到底是怎么获取值?我这是多列的,不是一列
而且我是要时刻刷新的数据,这缓存存在实时刷新吗
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询