从dataGridView中读取数据而不是C#中的csv文件#
我写了一个C#代码来读取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
我给输入如下:
而且,是有可能有列数的变化动态?
在DataGridView
中输入的数据存储在其行和单元格中。要exctract数据,你必须在行和细胞手动循环:
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
语句,你逼的顺序处理。所以没有平行的进程。
:我们从哪里得到“网格”变量?它作为参数传递给ExtractGridData函数。 – user1645333 2013-03-09 08:23:42
@ user1645333这是你的网格!您在表单中删除的“DataGridView”。默认情况下它被命名为'dataGridView1'。 – 2013-03-09 08:38:25
在调用这个ExtractGridData()时,我们应该传递给它什么参数? – user1645333 2013-03-09 08:45:05
网格如何填充?它绑定到数据源吗? – 2013-03-09 06:35:32
@ MD.Unicorn,该列表是手动填充的。 – user1645333 2013-03-09 06:38:54