创建数组以将值插入到数据网格视图中

时间:2016-03-07 01:03:28

标签: c# datagridview

我的程序当前从.HRM格式的文​​本文件中读取值,并根据包含数据的列解析它们,并将数据插入到相应的行中。我目前将在代码和下面的代码中读取的代码我试图将代码放入一个列表然后插入到datagridview中,但我认为由于没有正确设置数组而我做错了,因为我不是确定它如何在列之间分割,以及如何决定数据插入哪一行datagridview。这是我用来加载文件的代码:

namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        {
            string filePath = @"F:\testdata.hrm";
            if (File.Exists(filePath))
                processfile(filePath);
            else
                System.Console.WriteLine("Error - File {0}  not Found", filePath);
            System.Console.ReadKey();
        }
    }

  //        static void processfile(String filePath)
 //   {
  //      List<string[]> result = File.ReadAllLines("filePath") //read all lines in the file
  //      .SkipWhile(x => x != "[HRData]") //skip lines until reaching the "[HRData]"
   //     .Select(x => x.Split(null, StringSplitOptions.RemoveEmptyEntries)) //split line by whitespace to get numbers in line
    //    .ToList(); // convert the result to a list
   //     result.ForEach(x => dataGridView1.Rows.Add(x));
          }
    }
}

这是我正在阅读的数据:

[HRData]
91  154 70  309 83  6451
91  154 70  309 83  6451
92  160 75  309 87  5687
94  173 80  309 87  5687
96  187 87  309 95  4662
100 190 93  309 123 4407
101 192 97  309 141 4915
103 191 98  309 145 5429
106 190 99  309 157 4662
106 187 98  309 166 4399
107 186 97  309 171 4143
107 185 97  309 170 4914
108 184 96  309 171 5426
108 183 95  309 170 5688

所以我想要做的是读取文件中的每一列,然后将每列添加到每个列的单独数组中,然后将它们插入到相应列中的datagridview中。我试图对此进行编码,但我不确定我做错了什么,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

var lines = File.ReadAllLines(@"F:\testdata.hrm").Skip(1);
foreach (var line in lines)
    dataGridView1.Rows.Add(line.Split(
        new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));

修改

根据您的评论,您希望将行旋转到列,将列旋转到行。你可以这样做:

var lines = File.ReadAllLines(@"F:\testdata.hrm").Skip(1);
List<string[]> list = new List<string[]>();
foreach (var line in lines)
{
    list.Add(line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
}
for (int i = 0; i < 6; i++)
{
    List<string> cols = new List<string>();
    for (int j = 0; j < list.Count; j++)
    {
        cols.Add(list[j][i]);
    }
    dataGridView1.Rows.Add(cols.ToArray());
}

将标题添加到行:

List<string> rowHeaders = new List<string> { "A", "B", "C", "D", "E", "F", "G" };
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    dataGridView1.Rows[i].HeaderCell.Value = rowHeaders[i];
}

答案 1 :(得分:0)

看起来你正在将Linq实现为C#代码?此外,您希望将每个列分隔为自己的数组,但是您只声明了一个数组?如果您希望每列都有自己的数组,则需要声明多个数组,或者需要声明一个三维数组。我建议使用foreach循环:

foreach(string column in filepath)
{
    string[] result = File.ReadAllLines("filePath");
    string dataColumn = dataGridView1.Rows.Add(result));
}