![](/img/trans.png)
[英]How to fill Datagridview in C# from DataTable adding custom columns?
[英]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;
現在您無需擔心在循環中創建列和填充單元格及其更好的性能
好吧,我解決了我的問題。 在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.