C# listview控件内的内容保存
如何比较方便快速的保存listview中的内容。比如保存下拉列表的所有内容,可以在setting.setting中加一个stringcollection类型的存储变量,然...
如何比较方便快速的保存listview中的内容。
比如保存下拉列表的所有内容,可以在setting.setting中加一个stringcollection类型的存储变量,然后使用Properties.Settings.Default带的方法即可保存数据。但是setting.setting默认可选数据类型没有适合listview的。请教如何保存和读取listview的全部内容。
注:如果能使用setting.setting保存最好,如果用xml或表格等方式保存读取请附示范代码(假设保存listview1的所有数据,读取数据并全部写入listview2中)。不仅保存读取显示的文本,包括每一个元素的名字,即name和text都需要保存读取,其他的字体什么的就没必要了。
如果有详尽的指导思路且我验证可行,将会接收答案。
如果解决方案比较好且有可用的示范代码,将额外加100悬赏。 展开
比如保存下拉列表的所有内容,可以在setting.setting中加一个stringcollection类型的存储变量,然后使用Properties.Settings.Default带的方法即可保存数据。但是setting.setting默认可选数据类型没有适合listview的。请教如何保存和读取listview的全部内容。
注:如果能使用setting.setting保存最好,如果用xml或表格等方式保存读取请附示范代码(假设保存listview1的所有数据,读取数据并全部写入listview2中)。不仅保存读取显示的文本,包括每一个元素的名字,即name和text都需要保存读取,其他的字体什么的就没必要了。
如果有详尽的指导思路且我验证可行,将会接收答案。
如果解决方案比较好且有可用的示范代码,将额外加100悬赏。 展开
1个回答
展开全部
因为ListViewItem的所有属性都是可序列化的(包括SubItems),所以直接二进制序列化ListViewItem即可。为了方便保存,序列化得到的二进制流转为字符串,想存在什么地方都行。
下面给出序列化和反序列化方法以及示例代码:
public IEnumerable<string> SerializeListViewItems(ListView listView)
{
var serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
foreach (var item in listView.Items)
{
using (var ms = new MemoryStream())
{
serializer.Serialize(ms, item);
yield return Convert.ToBase64String(ms.ToArray());
}
}
}
public IEnumerable<ListViewItem> DeserializeListViewItems(IEnumerable<string> itemStringList)
{
var serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
foreach (var item in itemStringList)
{
using (var ms = new MemoryStream(Convert.FromBase64String(item)))
{
yield return serializer.Deserialize(ms) as ListViewItem;
}
}
}
使用时:
var list = SerializeListViewItems(listView1);
var listView2 = new ListView();
listView2.Width = listView1.Width;
listView2.Height = listView1.Height;
foreach (var item in DeserializeListViewItems(list))
{
listView2.Items.Add(item);
}
this.Controls.Add(listView2);
需要注意的几点:
ListViewItem可能被置有GroupKey和/或ImageListKey,在序列化反序列化之后得到的ListViewItem依然有这两项属性的值,但其并不会生效,原因在于listView2没有如同listView1的ImageList和Groups。
如果确实有需要,可以考虑将ImageList(包括图片)和Groups二进制序列化。当然,源listView的其他属性比如宽高等等也可以一并序列化带走。
此外,因为代码序列化了整个ListViewItem,所以包括字体前景色之类的信息都被带走了,反序列化后也能看见。
最后,如果你仅仅是想保存所有的ListViewItem(及其SubItems)的Name和Text,可以直接遍历并生成树状结构,转为xmlDocument或者json对象,之后存文件或者当做字符串写设置都可以。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询