@【C#】(listview—txt文件读取,显示,保存)
(1)在资源管理器中选择对应的控件,并在属性中设置“View”为“Details”。
(2)添加列标题
点击【添加】按钮,在右侧【Text】处修改为列标题
(3)设置整行选择和网格线,设置为true
(4)打开数据文件txt时,内容显示在Listview1中。
this.listView1.Items.Clear(); //先清空listview1中所有数据
OpenFileDialog oFD1 = new OpenFileDialog();
oFD1.InitialDirectory = "C:\\"; //显示初始目录,
oFD1.Filter = "txt files(*.txt)|*.txt|All files(*.*)|*.*"; //文件名筛选字符串
oFD1.FilterIndex = 2;
oFD1.RestoreDirectory = true;
//若用户在对话框中单击确定,则结果为DialogResult.OK
//否则结果为DialogResult.Cancel
if (oFD1.ShowDialog() == DialogResult.OK) //打开文件
{
MessageBox.Show("成功打开文件:" + oFD1.FileName); //显示选择的文件名
FileStream fs = new FileStream(oFD1.FileName, FileMode.Open); //需添加头文件system.IO
StreamReader s1 = new StreamReader(fs, Encoding.ASCII);
string sepatator = ","; //以逗号分割字符串
char[] cgap = sepatator.ToCharArray();
string[][] data = new string[100][];
for (int i = 0; i < 999; i++)
{
string str1 = s1.ReadLine(); //读取一行字符
if (str1 == null) break;
string[] str2 = str1.Split(cgap, StringSplitOptions.None); //基于数组中的字符将字符串拆分为多个子字符串
ListViewItem b = new ListViewItem(new string[] { str2[0], str2[1], str2[2] });
listView1.Items.Add(b);
}
}
注:1. oFD1.InitialDirectory = “C:\”; //可以修改为常用目录
2.string sepatator = “,”; //以逗号分割字符串,也可以以空格分隔字符串,只要与数据文件相对应即可
3. ListViewItem b = new ListViewItem(new string[] { str2[0], str2[1], str2[2] }); //有几列便有几个str2[i]
(4)使用listview1中读入的数据进行计算
listview中的数据都是string格式,item.SubItems[i].Text,表示第i列listview中的数据,i从零开始,使用时根据需要进行类型转换。使用foreach循环遍历每一行
foreach (ListViewItem item in this.listView1.Items) //每一行
{
string name = item.SubItems[0].Text; //string类型无需转换
x1 = double.Parse(item.SubItems[1].Text); //转化为double
x2 = double.Parse(item.SubItems[2].Text);
/*================计算代码============================
============计算出a1,a2,a3,a4=========================
*/
ListViewItem b = new ListViewItem(new string[] { name, a1.ToString("F6"), a2.ToString("F6"),a3.ToString("F6"),a4.ToString(),a5.ToString()});
listView2.Items.Add(b);
}
(5)将计算结果数据显示在Listview2中
ListViewItem b = new ListViewItem(new string[] { name, a1.ToString("F6"),a2.ToString("F6"),a3.ToString("F6"),a4.ToString(),a5.ToString()});
listView2.Items.Add(b);
有几列数据都以==a.ToString(“F6”)==的格式转化为string形,再添加到ListViewItem b = new ListViewItem(new string[] { });
最后将b添加到listview2中即可。
(6)保存listview2中的数据
SaveFileDialog sFD1 = new SaveFileDialog();
sFD1.InitialDirectory = "C:\\";
sFD1.Filter = "txt files(*.txt)|*.txt|All files(*.*)|*.*"; //保存文件的格式
sFD1.FilterIndex = 1;
sFD1.RestoreDirectory = true;
if (sFD1.ShowDialog() == DialogResult.OK)
{
string s = "";
for (int m = 0; m <listView2.Items.Count; m++) //所有项的集合数
{
for (int n = 0; n < listView2.Items[m].SubItems.Count; n++) // 一个项的所有子项集合数
{
s += listView2.Items[m].SubItems[n].Text + " ";
}
s += "\r\n";
}
using(StreamWriter sw = new StreamWriter(sFD1.FileName))
{
sw.WriteLine(s); //在文件中添加文本
}
MessageBox.Show("成功保存文件:" + sFD1.FileName);
}
(7)清空
this.listView1.Items.Clear(); //只移除所有的项
this.listView1.Clear(); //从控件中移除所有项和列(包括列表头)
测试: