2012-02-17 102 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

相关问题