我的应用程序中有一个DatagridView。我想将gridview列序列化为XML文件。仅序列化列名称很容易,但我也希望序列化列索引。
序列化列我会这样做:
ArrayList array = new ArrayList();
foreach(DataGridViewColumn column in datagridView1.Columns)
{
array.Add(column.Name)
}
using (FileStream file = new FileStream("test.xml", FileMode.Create))
{
SoapFormatter formatter = new SoapFormatter();
formatter.Serialize(file, array);
}
但我想知道如何序列化列索引呢?
提前感谢您的帮助!
答案 0 :(得分:2)
使用Name和Index创建一个公共类ColumnInfo,您可以将其存储到可以进行分类的数组列表中。
[Serializable]
public class ColumnInfo
{
public string Name;
public int Index;
}
ArrayList array = new ArrayList();
foreach(DataGridViewColumn column in datagridView1.Columns)
{
ColumnInfo ci = new ColumnInfo();
ci.Name = column.Name;
//ci.Index = column.Index; //decide how to get column index
array.Add(ci);
}
using (FileStream file = new FileStream("test.xml", FileMode.Create))
{
SoapFormatter formatter = new SoapFormatter();
formatter.Serialize(file, array);
}
更新我个人使用XmlFormater,例如我从问题中复制了源样本。谢谢abstishchev
答案 1 :(得分:2)
前面需要注意两件事:
BinarySerializer
或XmlSerializer
进行临时序列化。List<string>
而不是无类型ArrayList
。话虽如此,我建议反对完全序列化 - 它对你的目的而言太重了,它不是一个很好的方法来长期存储或转移对象(例如,让我们说你在你的应用程序的v1.0中序列化一个类,然后在v2.0中反序列化它,可能会发生各种各样的怪异。)
我建议使用以下方法:按索引对列进行排序,然后逐行将它们写入您的文件。您的列将在您的文件中正确订购:
using(FileStream file = new FileStream("test.xml", FileMode.Create))
{
var columnNames =
dataGridView1.Columns
.Cast<DataGridViewColumn>()
.OrderBy(x => x.ColumnIndex)
.Select(x => x.Name);
foreach(string column in columnNames)
file.WriteLine(column);
}