【问题标题】:Populating a listview with a csv-file's content including groups使用 csv 文件的内容(包括组)填充列表视图
【发布时间】:2012-10-20 07:10:20
【问题描述】:

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

组、列 1、列 2、列 3、列 4、列 5

示例(所有字符串)

"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的第一个子项,Column3是Column1的第二个子项,Column4是Column1的第三个子项,Column5是Column1的最后一个子项。

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

什么是最有效的方法

  1. 读取具有该结构的 csv 文件列表
  2. 填充列表视图
  3. 写入 csv 文件

我尝试了什么:

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);
...

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

【问题讨论】:

  • 你有没有尝试过?请在此处发布。
  • 你能贴几行 CSV 文件吗?
  • 是否必须是您将值读入的 Listview..?你能把它们读入 DataGrid 吗?
  • 与列表视图相比有什么优势?
  • 取决于加载列表视图后要执行的操作。如果您想以表格/网格格式查看数据,则 DataGrid 可以工作。但我不确定您在填充 ListView 后要对数据做什么

标签: c# listview


【解决方案1】:

这里有一些你可以尝试的初学者,如果这对你有用,请报告。 我将从一个 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);
}

【讨论】:

    【解决方案2】:

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

    非常棒的一点是异常处理——如果行的格式不正确,则会抛出 MalformedExceptions。

    查看here了解更多详情。

    我已经用过很多次了,它从来没有让我失望过!也使您的代码更易于阅读。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 2012-01-01
      • 2017-02-20
      • 2021-04-29
      • 1970-01-01
      相关资源
      最近更新 更多