从具有大量列的DataTable添加值后,DataGridView为空
本文关键字:添加 为空 DataGridView DataTable | 更新日期: 2023-09-27 18:25:00
我的DataTable有1000多列,我想在datagridview上显示值。由于FillWeingth问题,我使用以下方法填充网格视图,
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列在你的网格下,它就像谷歌或其他。。。甚至你也没有在编程一个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中的数据。谢谢