質問

私のデータテーブルには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;

今、あなたは列の作成を心配し、ループとそのはるかに優れたパフォーマンスでセルを埋める必要はありません

データをDatagridViewにバインドします

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top