繁体   English   中英

如何在C#windows应用程序的数据网格视图中添加超过65,535列?

[英]How to add more than 65,535 columns in a data grid view in C# windows application?

或者为此目的是否有更适合的第三方控制?

我知道DevExpress XtraGrid理论上支持网格中的Int32.MaxValue行或列。 在这种情况下,限制是系统内存而不是网格。

但你真的需要显示如此多的数据吗?

简短的回答:不要这样做!

答案很长:将FillWeight更改为10或更小(默认值为100)。 您达到的限制是由于总FillWeight超过64K x 100(谁知道为什么这是一个限制)。

使用虚拟列表(仅加载可见的行)。 我不确定WinForms ListView是否具有虚拟模式但WPF具有虚拟模式。

因此,创建一个WPF用户控件并将其设置为VirtualMode = True,并使用ElementHost容器在WinForms客户端上托管该用户控件。

对不起,我不能更具体,我没有代码可以提供。

瑞安

你错过了FillWeight变量的浮点数不是整数,所以0.5f或0.01f就可以了(理论上后者最多允许6553500列)。 不幸的是,创作非常缓慢(至少对我来说,越来越多的列已经超过1000列; 10,000列需要大约20秒)。 也许其他人建议的VirtualMode值得一试。

对于它的价值,这里是我用来创建一个x大小的空单元格表的代码。 也许有人可以进一步优化速度:

private void createDGVcells(DataGridView dgv, int columns, int rows) {
    // Optimization:
    dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;  // Massive speed up if high column count
    dgv.ScrollBars = ScrollBars.None;   // Apx. 75% speedup for high row count
    dgv.AllowUserToAddRows = false; // Further 50% apx speedup when creating rows
    dgv.ReadOnly = true;            // Small apx. 50ms latency speedup?

    // First clear any existing cells, should they exist:
    if (dgv.DataSource != null) dgv.DataSource = null;
    else    {
        dgv.Rows.Clear();
        dgv.Columns.Clear();
    }

    // Create the first row (the columns):
    DataGridViewColumn[] dgvc = new DataGridViewColumn[columns];
    for (int i = 0; i < dgvc.Length; ++i)   {
        DataGridViewColumn dg = new DataGridViewTextBoxColumn();
        dg.FillWeight = 0.1f; // Allows up to 655350 columns in theory
        dgvc[i] = dg;
    }
    dgv.Columns.AddRange(dgvc);

    // Add all the rows (very quick)
    for (int j = 0; j < rows - 1; j++) dgv.Rows.Add();

    // Optional to turn these back on
    dgv.ReadOnly = false;
    dgv.AllowUserToAddRows = true;
    dgv.ScrollBars = ScrollBars.Both;
    dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
}   

Xceed的WPF DataGrid可以轻松完成此任务,并使用列和UI虚拟化。 看看他们的现场演示。 您可以使用测试perf所需的尽可能多的列和行来填充演示。 http://xceed.com/Grid_WPF_Demo.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM