使用csv文件的内容(包括组)填充列表视图

时间:2012-10-30 21:05:39

标签: c# listview

所以你在文本文件和列表视图中有一个csv列表。字段是

  

组,列1,列2,栏3,Column4,Column5

示例(所有字符串)

"Beginning","1","Quiet","Some text","Some other text","c:\...\image.jpg"
"Beginning","2","Quiet","Some text2","Some other text2","c:\...\image2.jpg"
"Middle","3","Quiet","Some text3","Some other text3","c:\...\image3.jpg"
"Middle","4","Running","Some text4","Some other text4","c:\...\image4.jpg"

组是列表视图组。 Column1是listviewitem,Column2是Column1的第1个子项,Column3是Column1的第2个子项,Column4是Column1的第3个子项,Column5是Column1的最后一个子项。

Group和Column2不是唯一的,所有其他列都是唯一的。

最有效的方法是什么?
  1. 读取具有该结构的csv文件列表
  2. 填充listview
  3. 写入csv文件
  4. 我尝试了什么:

    ListViewGroup k = new ListViewGroup("group1");
    ListViewGroup l = new ListViewGroup("group2");
    ListViewGroup a = new ListViewGroup("group3");
    listView1.Groups.AddRange(new ListViewGroup[] {a, k, l });
    ListViewItem item1 = new ListViewItem("column1_1", 0);
    item1.SubItems.Add("column2_1");
    item1.SubItems.Add("column3_1");
    item1.SubItems.Add("column4_1");
    item1.SubItems.Add("column5_1");
    item1.Group=k;
    listView1.Items.Add(item1);
    
    ListViewItem item2 = new ListViewItem("column1_2", 0);
    ...
    

    作为基础。但这种方法使自动化变得困难。特别是当有更多的组被重用时。所以我正在寻找一种通常这样做的方式。

2 个答案:

答案 0 :(得分:0)

以下是您可以尝试初学者的事情,请报告这是否适合您。 我将从单个ListView First开始,以便您了解事情的工作原理。

FileStream fileStreamNew = File.Open("C:\\myCSVFile.csv", FileMode.Open, FileAccess.Read);
StreamReader streamRead = new StreamReader(fileStreamNew);
string strView = streamRead.ReadToEnd();
streamRead.Close();
fileStreamNew.Close();

String[] strArray = strView.Split(new char[] { ',' });
foreach (string strValue in strArray)
{
   listView1.Items.Add(strValue);
}

答案 1 :(得分:0)

在导入和导出到.csv(或任何分隔文件)方面,有一个名为TextFieldParser的很好的类(有点令人惊讶地)是Microsoft.VisualBasic命名空间。您只需将其指向文件,说明分隔符是什么,并在调用ReadLine()时返回字符串[]。您还可以定义注释标记,确保只导入所需的数据。

最棒的是异常处理 - 如果该行是意外格式,则会抛出MalformedExceptions。

查看here了解更多详情。

我已经习惯了很多次,它永远不会让我失望!还使您的代码更容易阅读。