繁体   English   中英

从dataGridView而不是C#中的csv文件读取数据

[英]Reading data from dataGridView instead of a csv file in C#

我已经编写了C#代码以从csv文件读取数据。 数据格式为:

2,3,4,5,6
4,2,4,5,6
4,5,6,3,2
5,3,5,6,3

读取它的代码是:

var lines = File.ReadLines("Data.csv");
var numbers = ProcessRawNumbers(lines); 

函数ProcessRawNumbers如下:

private static List<List<double>> ProcessRawNumbers(IEnumerable<string> lines)
    {
        var numbers = new List<List<double>>();
        /*System.Threading.Tasks.*/
        Parallel.ForEach(lines, line =>
        {
            lock (numbers)
            {
                numbers.Add(ProcessLine(line));
            }
        });
        return numbers;
    }

private static List<double> ProcessLine(string line)
    {
        var list = new List<double>();
        foreach (var s in line.Split(Separators, StringSplitOptions.RemoveEmptyEntries))
        {
            double i;
            if (Double.TryParse(s, out i))
            {
                list.Add(i);
            }
        }
        return list;
    }

我想对DataGridView做同样的事情。 如何做到这一点?

DataGridView我输入如下:

在此处输入图片说明

另外,是否可以使列数动态变化?

DataGridView输入的数据存储在其行和单元格中。 要提取数据,必须手动遍历行和单元格:

public List<string[]> ExtractGridData(DataGridView grid)
{
    int numCols = grid.Columns.Count;
    List<string[]> list = new List<string[]>();
    foreach (DataGridViewRow row in grid.Rows)
    {
        if (row.IsNewRow) // skip the new row
            continue;
        string[] cellsData = new string[numCols];
        foreach (DataGridViewCell cell in row.Cells)
            if (cell.Value != null)
                cellsData[cell.ColumnIndex] = cell.Value.ToString();
        list.Add(cellsData);
    }

    return list;
}

如果要动态更改列,则可以访问网格的Columns属性。 例如,要添加列,您可以编写:

dataGridView1.Columns.Add("NewColumn", "New Column");

还要注意,在您的方案中使用Parallel.ForEach没有优势,因为您必须顺序处理数据,并且通过使用lock语句强制执行顺序处理。 因此,没有并行处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM