从具有大量列的 DataTable 添加值后清空 DataGridView

Posted

技术标签:

【中文标题】从具有大量列的 DataTable 添加值后清空 DataGridView【英文标题】:Empty DataGridView after adding values from DataTable with large number of columns 【发布时间】:2012-03-08 15:30:23 【问题描述】:

我的 DataTable 有超过 1000 列,我想在 datagridview 上显示值。因为FillWeigth的问题我用下面的方法来填充gridview,

public bool TransferDataTableToGrid(DataGridView dataGrid, DataTable dataTable)
    
        dataGrid.SuspendLayout();

        if ((dataGrid != null) && (dataTable != null))
        
            dataGrid.Columns.Clear();
            dataGrid.AutoGenerateColumns = false;
            dataGrid.DataSource = dataTable;

            for (int i = 0; i < dataTable.Columns.Count; i++)
            
                DataGridViewColumn column = new DataGridViewColumn();
                column.Name = dataTable.Columns[i].ColumnName;
                column.FillWeight = 1;
                column.CellTemplate = new DataGridViewTextBoxCell();
                column.ValueType = dataTable.Columns[i].DataType;
                dataGrid.Columns.Add(column);
            
            for (int i = 0; i < dataTable.Columns.Count; i++)
            
                for (int ii = 0; ii < dataTable.Rows.Count; ii++)
                
                    dataGrid[i, ii].Value = dataTable.Rows[ii][i];
                
            
        
        dataGrid.ResumeLayout();
        return true;
    

有时我的网格视图是空的。只有在第二次执行数据之后才会显示。你有什么想法,为什么...?

谢谢。

【问题讨论】:

你不觉得你的表有 1000 列有点奇怪吗? 不幸的是,数据测量有 ca。一个对象 1500 分 当您手动添加所有数据时,您不应将表指示为 DataSource,因为它存在冲突,但我不确定这是否会导致您提到的错误。但是如果有任何进展,请尝试并报告。 【参考方案1】:

我推荐使用分页,我的意思是你可以用导航按钮显示大约 20 列 在您的网格下,它就像 Google 或其他……甚至您都没有编写 Web 应用程序。

【讨论】:

【参考方案2】:

使用绑定源填充您的网格

            SqlDataAdapter adapter = new SqlDataAdapter(database.cmd);
            dataSet1.Tables.Clear();
            adapter.Fill(dataSet1, "Table");
            bs = new BindingSource();
            bs.DataSource = dataSet1.Tables["Table"];
            dataGridView1.DataSource = bs;

现在您无需担心在循环中创建列和填充单元格,而且性能要好得多

Bind Data to Datagridview

【讨论】:

它不适用于具有大量列的数据表。见codeguru.com/forum/showthread.php?t=516795【参考方案3】:

好吧,我解决了我的问题。根据 Ivan 的建议,我尝试了另一种填充数据的方法:我不使用 DataSource,而是手动添加新行

            foreach (DataRow row in dataTable.Rows)
            
                var dataGridRow = new DataGridViewRow();
                dataGridRow.CreateCells(dataGrid);

                for (int i = 0; i < row.ItemArray.Length; i++)
                
                    dataGridRow.Cells[i].Value = row.ItemArray[i];
                

                dataGrid.Rows.Add(dataGridRow);
            

...它可以工作 - 显示 dgv 中的数据。谢谢!

【讨论】:

以上是关于从具有大量列的 DataTable 添加值后清空 DataGridView的主要内容,如果未能解决你的问题,请参考以下文章

获取具有名称的 DataTable 列的索引

c# 如何从datatable中取出某列的值并去除这一列的相同值,并将这列添加到新的表中

关于c#中的datatable,不知道如何清空里面的数据

从datatable里取某行某列的值

R中向具有大量数据集的数据框添加新列的有效方法

在 Chrome 浏览器中具有固定列的 DataTable 显示标题和正文之间的空间