我的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;
}
有时候我的网格视图是空的。仅在显示第二个执行数据之后。你有什么想法,为什么......?
感谢。
答案 0 :(得分:0)
我建议使用分页,我的意思是你可以使用导航按钮显示大约20列 在您的网格下,它就像Google或其他人......即使您没有编写Web应用程序。
答案 1 :(得分: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;
现在您不必担心在循环中创建列和填充单元格以及更好的性能
答案 2 :(得分:0)
好吧,我解决了我的问题。根据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中的数据。谢谢!