C#,DataTable到ArrayList?

我有一个几行的数据表,每行有几列。
我想创建一个将所有行都计算为字符串的arraylist
所以每个数组项看起来像这样{1;qwqww;qweqweqwe;qweqweqw;qwe}
字符串中的项目将用; 它是一个.NET 2解决方案

谢谢

这是一个实际有效的解决方案。

 ArrayList rows = new ArrayList(); foreach (DataRow dataRow in myDataTable.Rows) rows.Add(string.Join(";", dataRow.ItemArray.Select(item => item.ToString()))); 

但是,我觉得我应该指出使用过时的ArrayList是不明智的。 请改用List ,因为行是字符串:

 List rows = new List(); 

其余代码是相同的。

我建议您使用强类型集合,而不是使用ArrayList因为与非强类型DataTable相比, ArrayList不会带来太多价值。 因此,您可以从定义代表每一行的模型开始:

 public class MyModel { public int Id { get; set; } public string Prop1 { get; set; } public string Prop2 { get; set; } } 

然后遍历您的DataTable并填充集合:

 List models = new List(); foreach (DataRow row in dt.Rows) { MyModel model = new MyModel { Id = (int)row[0], Prop1 = (string)row[1], Prop2 = (string)row[2] }; models.Add(model); } 

或者,如果您愿意,可以使用LINQ:

 List models = dt.Rows .Cast() .Select(row => new MyModel { Id = (int)row[0], Prop1 = (string)row[1], Prop2 = (string)row[2] }) .ToList(); 
 ArrayList rows = new ArrayList(); foreach (DataRow dataRow in ((DataTable)dataGrid.DataSource).Rows) { rows.Add(String.Join(";", (string[])dataRow.ItemArray)); } 

这是我的理论:这是我用来为数据表编写CSV的代码片段:

 foreach (DataRow row in table.Rows) { for (int i = 0; i < table.Columns.Count; i++) { WriteItem(stream, row[i], quoteall); if (i < table.Columns.Count - 1) stream.Write(','); else stream.Write('\n'); } } 

使用StringBuffer而不是WriteItem ... stream等...

 ArrayList aList = new ArrayList(dt.Rows.Count); foreach (DataRow row in dt.Rows) { aList.Add(row); }