如何在C#中序列化Datagridview数据?
答案 0 :(得分:1)
我最近遇到了序列化 DataGridView 的需求,但我还没有在这里找到关于如何解决这个需求的客观答案。我知道 DataGridView 是一个视图,而不仅仅是数据。所以,经过思考和测试,我得到了一个实用的解决方案,快速且非常简单,这对我来说已经足够了,优点是能够记录和检索出现在 DataGridView 列中的任何类型的对象,例如图片:
1.1) 创建一个与 DataGridView 具有相同维度的对象的二维数组:
object[,] dataGridViewObjectsArray = new object[myDataGridView.Rows.Count, myDataGridView.Columns.Count];
1.2) 将DataGridView的每一行每一列转移到对象数组中的相同位置:
for (int x = 0; x < myDataGridView.Rows.Count; x++)
for (int y = 0; y < myDataGridView.Columns.Count; y++)
dataGridViewObjectsArray[x, y] = myDataGridView.Rows[x].Cells[y].Value;
1.3) 保存对象数组(在我的情况下为二进制,使用来自加拿大 SK 里贾纳的 Dainel Schroeder 的出色解决方案):
BinarySerialization.WriteToBinaryFile<object[,]>(pathAndNameToObjectsArray, dataGridViewObjectsArray);
2.1) 恢复二进制保存的对象数组(使用来自加拿大 SK 里贾纳的 Dainel Schroeder 的同样出色的解决方案):
object[,] dataGridViewObjectsArray = BinarySerialization.ReadFromBinaryFile<object[,]>(pathAndNameToObjectsArray);
2.2) 清空 DataGridView 行:
myDataGridView.Rows.Clear();
2.3) 为对象数组中的每一行在DataGridView 中添加一个空行,并将对象数组的每一列回传到DataGridView 中的相同位置:
for (int x = 0; x < dataGridViewObjectsArray.GetLength(0); x++)
{
myDataGridView.Rows.Add();
for (int y = 0; y < dataGridViewObjectsArray.GetLength(1); y++)
myDataGridView.Rows[x].Cells[y].Value = dataGridViewObjectsArray[x, y];
}
答案 1 :(得分:0)
序列化用于数据,它应该能够序列化。您正在尝试序列化视图,其目的是向用户显示数据。 您实际需要做的是序列化填充DataGridView的数据。
OT您回答了自己的问题:在Assembly'System.Windows.Forms中输入'System.Windows.Forms.DataGridView',Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'未标记为可序列化。 您无法序列化DataGridView,因为它未在框架中标记为可序列化。
您可以尝试创建一个与DataGridView完全相同的Control,并使用自定义Serialize / Deserialize方法或以可以使用.NET序列化程序序列化的方式实现它。但这是一种错误的做法恕我直言。
坚持序列化数据并重新填充视图。