List 中的数据表

我已经下载了List Rows包含的数据,如下所示:

 class Row { string[] Items { get; set; } public Row(string[] Items) { this.Items = Items; } } 

行基本上以逗号分隔的条目(.csv)

 using (var reader = new StreamReader(spreadSheetStream)) { string header = reader.ReadLine(); //This is the header Rows.Add(new Row(header.Split(','))); while (!reader.EndOfStream) { string tickerInfo = reader.ReadLine(); //This is a data entry Rows.Add(new Row(tickerInfo.Split(','))); } } 

我将List转换为像这样的Datatable

 DataTable historicalDataTable = ToDataTable(Rows); 

List Rows的第一个元素包含列的名称,其中包含七个列。 然后,每个元素是实际的数据元素。

 public static DataTable ToDataTable(List items) { DataTable dataTable = new DataTable(typeof(T).Name); //Get all the properties PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo prop in Props) { //Setting column names as Property names dataTable.Columns.Add(prop.Name); } foreach (T item in items) { var values = new object[Props.Length]; for (int i = 0; i < Props.Length; i++) { //inserting property values to datatable rows values[i] = Props[i].GetValue(item, null); } dataTable.Rows.Add(values); } //put a breakpoint here and check datatable return dataTable; } 

当我尝试写出表的内容时,我看到了正确的行数, 但是ItemArray没有任何内容

 foreach (DataRow dataRow in historicalDataTable.Rows) { Console.WriteLine(dataRow.ToString()); foreach (var item in dataRow.ItemArray) { Console.WriteLine(item); } } 

你的代码有点矛盾。 您正在尝试将属性复制为列名,但是您的csv代码实际上将第一行填充为列名。 标题行和数据行之间没有区别

您可以直接将其读入数据表,其中包括: –

(虽然你可能想做更好的错误检查)

 var dt = new DataTable("Rows"); string data = "a,b,c\r\n1,2,3\r\n4,5,6"; var stream = GenerateStreamFromString(data); // http://stackoverflow.com/questions/1879395/how-to-generate-a-stream-from-a-string using (var reader = new StreamReader(stream)) { reader.ReadLine()?.Split(',').ToList().ForEach(h => dt.Columns.Add(h)); while (!reader.EndOfStream) { dt.Rows.Add(reader.ReadLine()?.Split(',').ToArray()); } } foreach (DataColumn dataColumn in dt.Columns) { Console.Write($"{dataColumn.ColumnName} "); } Console.WriteLine(); foreach (DataRow dataRow in dt.Rows) { Console.Write("Row: "); foreach (var item in dataRow.ItemArray) { Console.Write(item + " "); } Console.WriteLine(); }