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); }