[英]Empty DataGridView after adding values from DataTable with large number of columns
my DataTable has over 1000 columns and I want to display values on the datagridview. 我的DataTable有1000多个列,我想在datagridview上显示值。 Because of the FillWeigth problem I use the following method to fill the gridview, 由于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;
}
and sometimes I have an effect that my gridview is empty. 有时我的网格视图是空的。 Only after second execution data is displayed. 仅在第二次执行数据显示之后。 Do you have any ideas, why...? 您有什么想法,为什么...?
Thanks. 谢谢。
我建议使用分页,这意味着您可以在网格下显示约20列带有导航按钮的控件,就像Google或其他应用程序一样,甚至您不是在编写Web应用程序。
Use binding source to fill your grid 使用绑定源填充网格
SqlDataAdapter adapter = new SqlDataAdapter(database.cmd);
dataSet1.Tables.Clear();
adapter.Fill(dataSet1, "Table");
bs = new BindingSource();
bs.DataSource = dataSet1.Tables["Table"];
dataGridView1.DataSource = bs;
now you dont need to worry about creating columns and fill cells in loops and its much better performance 现在您无需担心在循环中创建列和填充单元格及其更好的性能
Well, I solved my problem. 好吧,我解决了我的问题。 With Ivan's suggestion I tried the alternative way to fill data: instead of using DataSource I add new rows manually 在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);
}
...and it works - data in dgv is displayed. ...并且有效-显示dgv中的数据。 Thanks! 谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.