2011-09-15 5 views
0

私はコマンド・クラスを持っていて、実行して元に戻すためにDataGridViewRowをメンバーとして使用しています。コンストラクタのメンバー行(たとえば_row = r;)に入っているdgvrを割り当てようとすると、元のdgvrが元のdgvrが削除されるように、新しいコピーではなく参照を取得しているように見えます。次にメンバー行が空になります)。値によってコピーするDataGridViewRow?

私も行は以下のようにMSDNを経由して「コピー」にしようとしました:

public DataGridViewRow CloneWithValues(DataGridViewRow row) 
{ 
    DataGridViewRow clonedRow = (DataGridViewRow)row.Clone(); 
    for (Int32 index = 0; index < row.Cells.Count; index++) 
    { 
     clonedRow.Cells[index].Value = row.Cells[index].Value; 
    } 
    return clonedRow; 
} 

これは、しかし、(私は名前でフィールドにアクセスすることができないよう、後ろのスキーマを残しているように見えます例えば_row.Cells ["critical"]。値)。

DataGridViewRowの値でコピーを作成するにはどうすればよいですか?

+0

DataGridViewレベルでスキーマを取得できませんか?別のDataGridViewオブジェクトで複製された行を使用する場合は、元のDataGridViewオブジェクトの複製コピーとして作成すると、DataGridViewオブジェクトにスキーマが含まれているように感じます。 – Arun

+0

私はしばらくの間、厄介な回避策を見つけました:udpateを完了した後に行を削除するのではなく、行を見えないようにしてください。これにより、取り消しが必要な場合に備えてデータが残ります。 – Handprint

答えて

1

datatable.Rows.Addを呼び出して、変更可能なdatarow.ItemArrayを渡してください。

これは、私が思っているグリッドデータソースであるはずのテーブルへの参照がまだ残っている場合に機能します。私は私のプロジェクトでこれを使用し、通常正常に動作しました。

+0

私はあなたがリファクタリングする必要があるかもしれません。私は、DataGridViewを使用して、ユーザーが選択する行を更新しました(チェックボックスを付けました)。私はdgvをループし、チェックボックスに基づいて更新します。ユーザーが選択した行だけを含むようにDataTableを更新してから、DataTableをループする必要があると考えていますか? – Handprint

+1

あなたの答えは機能しました。 DataTable.Row.ItemArrayを新しいObject []に渡しました。いくつかのキャスティングの問題は別として、うまくいきました。 – Handprint

+0

喜んで助けてください:) –

関連する問題