多数の列でデータテーブルから値を追加した後の空のdatagridview
-
27-10-2019 - |
質問
私のデータテーブルには1000以上の列があり、DatagridViewに値を表示したいと思います。塗りつぶしの問題のため、私は次の方法を使用してグリッドビューを埋めます。
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;
}
そして、時々、私のgridviewが空であるという効果があります。 2回目の実行データが表示された後にのみ。アイデアはありますか、なぜ...?
ありがとう。
解決 3
さて、私は自分の問題を解決しました。 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のデータが表示されます。ありがとう!
他のヒント
ページングを使用することをお勧めします。つまり、グリッドの下にナビゲーションボタンを備えた約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;
今、あなたは列の作成を心配し、ループとそのはるかに優れたパフォーマンスでセルを埋める必要はありません
所属していません StackOverflow