2017-02-26 8 views
0

WindowsフォームでDGVに関する質問があります。ですから、私はdgv1にいくつかの情報が書かれています。そして、私はこのコードで二dgv2を満たしています:両方のdgvのデータが同時に変更されているのはなぜですか?

dataGridView2.DataSource = dataGridView1.DataSource; 

をし、それが正常に動作しますが、私は(行または列を削除する)dgv2で何かを変更していたときに、それはあまりにもdgv1に表示されます。なぜ私は理解できません。私はdgv1からdgv2にデータを追加するだけで、dgv1をどのように(変更なし)にしたいのですか?同時に、私はdgv2を変更し、その違いを見たい(dgv1とdgv2の間)。

だから、どうしてそれが起こっているのでしょうか?私はこのコードでそれを解決した

dataGridView2.Columns.Add("Column1", "Name"); 
dataGridView2.Columns.Add("Column2", "Date"); 
dataGridView2.Columns.Add("Column3", "Time"); 
DataGridViewRow row = new DataGridViewRow(); 

for (int i = 0; i < dataGridView1.Rows.Count; i++) 
{ 
    row = (DataGridViewRow)dataGridView1.Rows[i].Clone(); 
    int intColIndex = 0; 

    foreach (DataGridViewCell cell in dataGridView1.Rows[i].Cells) 
    { 
     row.Cells[intColIndex].Value = cell.Value; 
     intColIndex++; 
    } 

    dataGridView2.Rows.Add(row); 
} 

dataGridView2.AllowUserToAddRows = false; 
dataGridView2.Refresh(); 
+1

これは参照型です。両方の 'DataGridView'コントロールの' DataSource'プロパティは単一のオブジェクトを指しています。 –

+0

https://stackoverflow.com/questions/24089591/reference-type-vs-value-type、https://stackoverflow.com/questions/1219664/c-sharp-reference-type-assignment-vs-value -type-assignment、https://stackoverflow.com/questions/1205444/value-type-vs-reference-type-object-class-c-sharp、またはC#のリファレンスタイプが何であるかを説明するその他のディスカッション、それがどのように機能するか、そしてそれらを使用することの意義。これらの問題の詳細については、http://www.yoda.arachsys.com/csharp/parameters.htmlも参照してください。 –

+0

https://stackoverflow.com/questions/8148385/weird-value-referencing、https://stackoverflow.com/questions/5057267/what-is-the-difference-between-a-reference-type-andも参照してください。 -value-type-in​​-c、https://stackoverflow.com/questions/4739213/in-c-use-of-value-types-vs-reference-types、https://stackoverflow.com/questions/32010172/what-is-the-difference-a-variable-object-and-reference、およびhttps://stackoverflow.com/questions/7513691/c-sharp-managed-code-reference-type-questionを名前に付けるさらにいくつかの。 –

答えて

0

シンプル:あなたは両方DataGridViewsのためにまったく同じデータソースを使用している、コピーではありません。

意味:データソースで何かを変更すると、それを使用するすべてのDataGridViewがそれに応じて更新されます。 2番目のDataGridViewに割り当てる前にデータソースを複製することができます

+0

しかし、データソースは "クローン()"機能を持っていません。 "for(int i = 0; i

+0

私はこのコードで解決しました: –

関連する問題