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

来源:互联网 发布:新歌2016网络红歌情歌 编辑:程序博客网 时间:2024/06/08 15:07

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();});





0 0
原创粉丝点击