2016-10-13 7 views
0

境界DGVから通常のDGVにDGVをコピーする必要があります。DatagridviewではUIのデータは表示されませんが、コードにデータがあります(デバッグ)

理由:データセットからの読み込み後にコンボボックスカラムを追加する必要があり、バインドされたDGVでは不可能です。そこで、私は新しいDGVでコンテンツをコピーしようとしました。任意のより良いアイデア?

私はDGVをコピーするために、これを使用:copy Datagrids

は、私はボタンでそれをテストするためにこれを書いた:それは仕事をdoesnのため

private void button1_Click(object sender, EventArgs e) 
    { 
     dgvExcel2.AutoGenerateColumns = true; 
     dgvExcel2 = CopyDataGridView(dgvExcel); 
     dgvExcel2.Refresh(); 
     dgvExcel2.Show(); 
     dgvExcel2.Update(); 
    } 

(更新、ショーは、単に何かをしようとするリフレッシュ)

私はUI上でプログラムを実行すると、dgvExcel2は常に空です。 しかし、私は私がデータに内容があることをデバッグする。

答えて

0

正しく覚えていれば、ComboBox機能を使用する場合は、AutoGenerateColumnsをtrueに設定することはできません。これは、DataGridViewでDataGridViewComboBoxColumnとして事前定義する必要があります。

また、DGVとの間でデータをコピーするのではなく、DataTablesまたはList<T>というUIの背後でこれを処理するのがベストプラクティスです。

次の答えをご覧ください。

DataGridView set column cell Combobox

Bind Data to the Windows Forms DataGridView Control

編集:との間で直接行をコピーするとは対照的に、UIの背後にあるデータテーブルにデータを処理

DGVがあなたの問題を解決するようです。これにより、DGVのコピー方法が不要になり、生活が楽になります。

手順はなります

  1. はDataTableの形式でデータを取得する(myData
  2. のBindingSourceをインスタンス化:

    BindingSource binding = new BindingSource();

  3. は、バインディングソースへのデータテーブルの割り当て

    binding.DataSource = myData;

  4. 次に、そのバインディングソースを関連するDGVに割り当てます。

    myDataGridView.DataSource = binding;

  5. そして、代わりにあなたのDGVs全体に行をコピーするあなたは自分のバインディングを再割り当てするか、新しいDGVのために新しいものを作成し、新しいバインディングに同じデータテーブルを割り当てることができます。

私はこれがより明確であり、正しく質問を理解していることを望みます。

+0

申し訳ありませんが、多分私はそれを悪く説明しました。私の最初の問題は、dgvExcel2がUIのデータを表示しないことです。私はまだComboBox-Rowを追加しませんでした。しかし、未来を知ることは良いことです。 – Atzen444

+0

ああ、私は編集を追加します、バインディングソースを使用していますか? –

+0

これを行うと、両方のDGVがバインドされています...バインディングなしでデータを含む1つのdgvが必要です。有界DGVにコンボボックス行を追加することはできません。 – Atzen444

関連する問題