我编写了一个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
中,我提供如下输入:
此外,是否可以动态更改列数?
答案 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
语句强制执行顺序处理。所以没有平行的过程。