【问题标题】:Empty DataGridView after adding values from DataTable with large number of columns从具有大量列的 DataTable 添加值后清空 DataGridView
【发布时间】:2026-01-15 07:55:01
【问题描述】:

我的 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,因为它存在冲突,但我不确定这是否会导致您提到的错误。但是如果有任何进展,请尝试并报告。

标签: c# datagridview datatable large-data


【解决方案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

    【讨论】:

    【解决方案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 中的数据。谢谢!

    【讨论】:

      最近更新 更多