[英]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.