簡體   English   中英

從具有大量列的DataTable中添加值后,清空DataGridView

[英]Empty DataGridView after adding values from DataTable with large number of columns

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

有時我的網格視圖是空的。 僅在第二次執行數據顯示之后。 您有什么想法,為什么...?

謝謝。

我建議使用分頁,這意味着您可以在網格下顯示約20列帶有導航按鈕的控件,就像Google或其他應用程序一樣,甚至您不是在編寫Web應用程序。

使用綁定源填充網格

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

現在您無需擔心在循環中創建列和填充單元格及其更好的性能

將數據綁定到Datagridview

好吧,我解決了我的問題。 在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中的數據。 謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM