2012-02-17 27 views
1

我的DataTable擁有1000列以上,我想在datagridview上顯示值。因爲FillWeigth問題我用下面的方法來填充GridView控件,從DataTable中添加大量列的值後,爲空DataGridView

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

,有時我有我的GridView是空的效果。僅在顯示第二個執行數據之後。你有什麼想法,爲什麼......?

謝謝。

+0

難道你不覺得你的桌子有1000列有點奇怪嗎? – Beatles1692 2012-02-17 08:12:23

+0

不幸的是,數據測量有約。對象爲1500分 – alex555 2012-02-17 08:33:54

+0

手動添加所有數據時,不應將表指定爲DataSource,因爲它存在衝突,但我不確定這是否會導致您提到的錯誤。但請嘗試並報告是否有任何進展。 – 2012-02-17 13:51:53

回答

0

好吧,我解決了我的問題。隨着伊萬的建議,我嘗試了另一種方式來填補數據:不是使用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數據。謝謝!

0

我建議使用分頁,我的意思是你可以在你的網格下面顯示大約20欄的導航按鈕 ,就像谷歌或其他人一樣......即使你不是編程一個web應用程序。

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

+0

它不適用於具有大量列的數據表。見http://www.codeguru.com/forum/showthread.php?t=516795 – alex555 2012-02-21 06:44:33