C#中如何将txt文件在ListView中按列显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中如何将txt文件在ListView中按列显示相关的知识,希望对你有一定的参考价值。

参考技术A

你好,软糖帮你做了一个读取TXT的程序。

这个数据格式需要有分割符才好被切分。处理成类似下面这样的

    商品编码:001,商品名称:香蕉250g, 中类名称:水果, 规格型号:A1,计量单位:吨, 订货数量:3400,库存数量:3400,商品产地:哥伦比亚

    商品编码:002,商品名称:梨子500g, 中类名称:水果, 规格型号:A1,计量单位:吨, 订货数量:6400,库存数量:3400,商品产地:菲律宾

    商品编码:003,商品名称:芒果750g, 中类名称:水果, 规格型号:A1,计量单位:吨, 订货数量:7400,库存数量:3400,商品产地:泰国

    商品编码:004,商品名称:牛奶250ml, 中类名称:奶制品, 规格型号:A1,计量单位:箱, 订货数量:84000,库存数量:3400,商品产地:新西兰

然后上代码咯,主要用一个DataTable暂存数据,以免出现某字段缺失导致的错位。

然后使用StreamReader读取TXT文本,最后把DataTable的数据集逐项添加到ListView,详细用法请看代码。

using System.IO;

namespace ListView用法 
    public partial class Form1 : Form 
        //第一个字段为主键:商品编码
        List<string> 字段列表 = new List<string>() 
            "商品编码", "商品名称", "中类名称", "规格型号",
            "计量单位", "订货数量", "库存数量", "商品产地" ;
        List<int> 显示宽度 = new List<int>()  80, 120, 80, 80, 80, 80, 100, 160 ;
        public string[] 分隔符 =  "," ;
        public string[] 值分隔符 =  ":" ;
        public string 数据文件路径 = @"J:\\Mini\\ListView用法\\ListView用法\\TestData.txt";
        DataTable 数据表;

        public Form1() 
            InitializeComponent();
        

        private void Form1_Load(object sender, EventArgs e) 
            listView1.View = View.Details;
            for (int i = 0; i < 字段列表.Count; i++) 
                string 字段名 = 字段列表[i];
                listView1.Columns.Add(字段名, 字段名, 显示宽度[i]);
            
            var k = listView1.Items.Add("暂无数据");
            k.BackColor = Color.LightPink;
        

        private void 测试() 
            初始化数据表();
            读取文档到数据表(数据文件路径);
            显示在listview();
        

        private void 初始化数据表() 
            数据表 = new DataTable();
            for (int i = 0; i < 字段列表.Count; i++) 
                string 字段名 = 字段列表[i];
                数据表.Columns.Add(字段名, typeof(string));
            
        

        private void 读取文档到数据表(string 路径) 
            StreamReader sr = new StreamReader(路径, Encoding.Default);
            while (true) 
                string 行文本 = sr.ReadLine();
                if (行文本 == null)  break;  else 
                    //开始逐行分析文本
                    if (行文本.Length > 1) 
                        //这里分隔符必须是一个string数组,可以只有一个元素
                        var 数据 = 行文本.Split(分隔符,  StringSplitOptions.RemoveEmptyEntries);
                        if (数据 != null && 数据.Length > 0) 
                            DataRow row = 数据表.NewRow();
                            foreach (var 项 in 数据)                                 
                                var 字段和值 = 项.Split(值分隔符, StringSplitOptions.RemoveEmptyEntries);
                                if (字段和值 != null && 字段和值.Length >= 2) 
                                    var 字段 = 字段和值[0].Trim();
                                    var 值 = 字段和值[1].Trim();
                                    if (字段列表.Contains(字段))  row[字段] = 值; 
                                                                
                            
                            数据表.Rows.Add(row);
                                                               
                    
                
            
        

        private void 显示在listview() 
            listView1.Items.Clear();
            int 列数 = 数据表.Columns.Count;
            for (int i = 0; i < 数据表.Rows.Count; i++) 
                var 记录 = 数据表.Rows[i];
                string 编号 = 记录[字段列表[0]].ToString();
                var 列表项 = listView1.Items.Add(编号, 编号);
                for (int y = 1; y < 列数; y++) 
                    string 值 = 记录[y].ToString();
                    列表项.SubItems.Add(值);
                               
            
        

        private void button1_Click(object sender, EventArgs e) 
            测试();
        
    

以上是关于C#中如何将txt文件在ListView中按列显示的主要内容,如果未能解决你的问题,请参考以下文章

在C#中按列对二维数组进行排序

如何使用 R 在 csv 文件中按列添加数据?

C# 读取TXT文件内容到listview

在matlab中按列将数据或值附加到csv文件

如何在 Laravel 的嵌套 2 级关系中按列排序?

如何在 Pandas 数据框中按列值分组