这就是问题所在:
if (commItems[0].CardNO == "" && commItems[0].Serial == "")
{
gridCommsItem.ItemsSource = commItems;
tempGrid = gridCommsItem;
gridCommsItem.Columns.Clear();
.
.
.
}
基本上我有2 datagrid
。
1个实际的datagrid" gridCommsItem"和重复的数据网格" tempGrid"。在我做gridCommsItem.Columns.Clear()之前,我想在tempGrid中存储gridCommsItem的所有属性,以便我可以在以后的代码中方便地恢复。
但是,通过设置断点,我在执行行IMMEDIATELY
后发现"gridCommsItem.Columns.Clear();"
,tempGrid也随gridCommsItem一起更新;所有列都清除了!我怎么能避免这个?
答案 0 :(得分:0)
我在执行gridGemsItem.Columns.Clear();
行后立即发现了这一点
看起来您已使用gridCommsItem源绑定了第二个网格。这就是为什么清除gridCommsItem也会清除其他网格。
我希望在tempGrid中存储gridCommsItem的所有属性,以便我可以 在以后的代码中方便地恢复。
我建议您将所有属性存储在某种xml文件中,以便以后进行恢复,而不是保存完整的网格。
答案 1 :(得分:0)
DataGrid通过引用传递,而不是按值传递;因此,当您清除一个变量时,实际上是清除了另一个变量引用的原始数据网格;因此,两个变量现在都不包含任何内容。
为避免这种情况,您必须对数据结构进行深层复制。您需要复制内容。
看看下面的链接;它解释了如何做到这一点。链接中的代码段
private void copyDgv1ValueToDgv2()
{
//using import method to copy the datatable of dgv1 to dgv2
for (int i = 0; i < dt.Rows.Count; i++)
{
f2.dt2.ImportRow(dt.Rows[i]);
}
//or to manually copy the data rows of dgv1 to dgv2 using this method
/*for (int i = 0; i < dt.Rows.Count; i++)
{
f2.dt2.Rows.Add(dataGridView1.Rows[i].Cells[0].Value.ToString(), dataGridView1.Rows[i].Cells[1].Value.ToString(),
dataGridView1.Rows[i].Cells[2].Value.ToString());
}*/
}
答案 2 :(得分:0)
本准则可能对您有所帮助。 您需要复制所有属性并创建主gridComms的克隆对象
static public void CloneObject(object dest, object src)
{
Type t = src.GetType();
PropertyInfo[] properties = t.GetProperties();
foreach (PropertyInfo pi in properties)
{
if (pi.CanWrite)
{
pi.SetValue(dest, pi.GetValue(src, null), null);
}
}
}