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

时间:2012-02-17 08:00:15

标签: c# datagridview datatable large-data

我的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;
    }

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

感谢。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用绑定源填充网格

            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

答案 2 :(得分:0)

好吧,我解决了我的问题。根据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中的数据。谢谢!