【发布时间】:2017-07-17 10:52:09
【问题描述】:
我对 Windows 窗体中的 DGV 有疑问。所以我有 dgv1 在哪里写了一些信息。然后我用这段代码填充第二个 dgv2:
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();
【问题讨论】:
-
这是关于引用类型的。两个
DataGridView控件的DataSource属性都指向一个对象。 -
另请参阅stackoverflow.com/questions/24089591/…、stackoverflow.com/questions/1219664/…、stackoverflow.com/questions/1205444/…,或任何其他解释 C# 中的引用类型是什么、它如何工作以及使用它们的含义的讨论。另请阅读yoda.arachsys.com/csharp/parameters.html 了解这些问题的详细说明。