如何在 "ListView" 中保存详细信息并将其加载到(属性设置)
how to save details in "ListView" and load it in (properties settings)
我在 ListVeiw 上遇到问题我找不到任何关于在属性设置中保存 listveiw 的视频,我有很多方法可以保存细节但间接方法和弱方法
注意:我不想使用 (split = "|") 因为如果我把一些细节有 |它打破了一切 alltext = SR.ReadToEnd().Split('|');
我使用 visual studio windows 形式 C#
这里是代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string[] alltext;
string text;
private void Form1_Load(object sender, EventArgs e)
{
StreamReader SR = new StreamReader("Text.txt");
alltext = SR.ReadToEnd().Split('|');
foreach (string s in alltext)
{
if (!string.IsNullOrWhiteSpace(s))
{
listView1.Items.Add(s);
}
}
SR.Close();
}
private void Set_Click(object sender, EventArgs e)
{
listView1.Items.Add(textBox1.Text);
// here save old details
StreamReader SR = new StreamReader("Text.txt");
text = SR.ReadToEnd();
SR.Close();
// Real Save details
StreamWriter SW = new StreamWriter("Text.txt");
SW.Write(text + textBox1.Text + "|");
SW.Close();
textBox1.Clear();
}
private void Remove_Click(object sender, EventArgs e)
{
if (MessageBox.Show("do you want to remove list" , "Test" , MessageBoxButtons.OKCancel , MessageBoxIcon.Question) == DialogResult.OK)
{
File.WriteAllText("Text.txt", "");
listView1.Items.Clear();
}
}
}
}
您可以创建自定义 class 来保存项目数据,如下所示:
public class ItemData
{
public int Index { get; set; }
public string Text { get; set; } = string.Empty;
}
如果需要,您可以在 class 中添加其他信息。在您的表单中创建一个 ItemData
列表作为字段:
private List<ItemData> itemsData = new();
然后每次将项目添加到列表时,将其添加到集合中,如下所示:
var item = listView1.Items.Add(textBox1.Text);
this.itemsData.Add(new ItemData { Index = item.Index, Text = item.Text });
当您需要保存所有项目时,您可以将集合转换为 JSON 字符串,如下所示:
string jsonString = JsonSerializer.Serialize(this.itemsData);
然后把结果保存在你需要的地方。当您需要填充项目时,您可以获取字符串并将其转换回集合并像这样填充 ListView:
List<ItemData> itemsData = JsonSerializer.Deserialize<List<ItemData>>(jsonString);
itemsData.ForEach(item => this.listView1.Items.Add(item.Text));
我在 ListVeiw 上遇到问题我找不到任何关于在属性设置中保存 listveiw 的视频,我有很多方法可以保存细节但间接方法和弱方法
注意:我不想使用 (split = "|") 因为如果我把一些细节有 |它打破了一切 alltext = SR.ReadToEnd().Split('|');
我使用 visual studio windows 形式 C#
这里是代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string[] alltext;
string text;
private void Form1_Load(object sender, EventArgs e)
{
StreamReader SR = new StreamReader("Text.txt");
alltext = SR.ReadToEnd().Split('|');
foreach (string s in alltext)
{
if (!string.IsNullOrWhiteSpace(s))
{
listView1.Items.Add(s);
}
}
SR.Close();
}
private void Set_Click(object sender, EventArgs e)
{
listView1.Items.Add(textBox1.Text);
// here save old details
StreamReader SR = new StreamReader("Text.txt");
text = SR.ReadToEnd();
SR.Close();
// Real Save details
StreamWriter SW = new StreamWriter("Text.txt");
SW.Write(text + textBox1.Text + "|");
SW.Close();
textBox1.Clear();
}
private void Remove_Click(object sender, EventArgs e)
{
if (MessageBox.Show("do you want to remove list" , "Test" , MessageBoxButtons.OKCancel , MessageBoxIcon.Question) == DialogResult.OK)
{
File.WriteAllText("Text.txt", "");
listView1.Items.Clear();
}
}
}
}
您可以创建自定义 class 来保存项目数据,如下所示:
public class ItemData
{
public int Index { get; set; }
public string Text { get; set; } = string.Empty;
}
如果需要,您可以在 class 中添加其他信息。在您的表单中创建一个 ItemData
列表作为字段:
private List<ItemData> itemsData = new();
然后每次将项目添加到列表时,将其添加到集合中,如下所示:
var item = listView1.Items.Add(textBox1.Text);
this.itemsData.Add(new ItemData { Index = item.Index, Text = item.Text });
当您需要保存所有项目时,您可以将集合转换为 JSON 字符串,如下所示:
string jsonString = JsonSerializer.Serialize(this.itemsData);
然后把结果保存在你需要的地方。当您需要填充项目时,您可以获取字符串并将其转换回集合并像这样填充 ListView:
List<ItemData> itemsData = JsonSerializer.Deserialize<List<ItemData>>(jsonString);
itemsData.ForEach(item => this.listView1.Items.Add(item.Text));