C#中序列化实现深拷贝,实现DataGridView初始化刷新

winfrom中DataGridView在的单元格在编辑时候会修改它的数据源的,如果我们遇到这样一种情景,刷新数据源到原始状态,这个时候要么数据源的重新获取绑定,要么通过拷贝一份原始档的数据再绑定处理,这里介绍拷贝方式处理。大致代码如下:

1.目标对需要序列化,并实现ICloneable 接口:

[Serializable]
public class DtoColumn : ICloneable
2.实现接口方法Clone:

public object Clone()
{
        using (MemoryStream ms = new MemoryStream(capacity))
        {
            object CloneObject;
            BinaryFormatter bf = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
            bf.Serialize(ms, this);
            ms.Seek(0, SeekOrigin.Begin);           
            CloneObject = bf.Deserialize(ms);              
            ms.Close();
            return CloneObject;
        }
}

3.通过拷贝一份数据来达到刷新的目的:

private List < dto.DtoColumn > DeepCloneData(List < dto.DtoColumn > rawdata) {
    return rawdata.Select(x = >x.Clone()).Cast < dto.DtoColumn > ().ToList()
}

this.dataGridView1.DoThreadPoolWork(() = >
{
    this.dataGridView1.DataSource = DeepCloneData(CloneInitialColumnData);
    this.dataGridView1.Refresh();
});





你可能感兴趣的:(深拷贝,datagridview)