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

时间:2013-03-09 06:18:49

标签: c# .net winforms csv datagridview

我编写了一个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中,我提供如下输入:

enter image description here

此外,是否可以动态更改列数?

1 个答案:

答案 0 :(得分:0)

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语句强制执行顺序处理。所以没有平行的过程。