2010-08-26 90 views
7

我有一个数据表少数行每列有几列。
我想创建countain所有行作为一个字符串的ArrayList
所以每个数组项是这样{1;qwqww;qweqweqwe;qweqweqw;qwe}
字符串中的项目将与; 分开,这是一个.NET 2溶液C#,DataTable到ArrayList?

谢谢

+0

所有列包含字符串? – thelost 2010-08-26 09:12:56

+0

yes(one is boolean)but it will be used as“true”“false” – 2010-08-26 09:20:51

+0

[Do not do it!](http://stackoverflow.com/questions/434414/what-is-the-most-vil -code-you-ever-ever-seen-in-a-production-enterprise-environm/434562#434562) – 2010-08-26 13:24:22

回答

10

这里一个实际可行的解决方案。

ArrayList rows = new ArrayList(); 

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

但是,我觉得我应该指出,使用陈旧的ArrayList是不明智的。使用List<string>代替,因为行是字符串:

List<string> rows = new List<string>(); 

其余代码是相同的。

+1

谢谢,但dataRow.ItemArray.Select(item => item.ToString)不适合我! 我正在使用.NET v2有什么关系吗? – 2010-08-26 10:04:21

+0

我得到“无法解析符号选择”!!! – 2010-08-26 10:29:29

+0

@数据库:在文件顶部添加'使用System.Linq;'。 – Timwi 2010-08-27 04:20:55

1

而不是使用ArrayList我会建议你使用强类型的集合,因为与非强类型DataTable相比,ArrayList不会带来太多价值。

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

然后循环在你DataTable,并填补了集合:所以,你可以通过定义一个模型,将代表每行开始

List<MyModel> models = new List<MyModel>(); 
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<MyModel> models = dt.Rows 
    .Cast<DataRow>() 
    .Select(row => new MyModel { 
     Id = (int)row[0], 
     Prop1 = (string)row[1], 
     Prop2 = (string)row[2] 
    }) 
    .ToList(); 
+0

不错,但是如果数据表中的行变化并且不总是3呢? – w69rdy 2010-08-26 09:19:37

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

项目将如何在字符串中分离?是由“,”还是“;”? – 2010-08-26 09:19:58

+0

不工作,他希望每个数组项目作为单个字符串,而不是数据行 – w69rdy 2010-08-26 09:21:05

+0

哦..我错过了他的问题中的这个事实! – 2010-08-26 09:48:33

1
ArrayList rows = new ArrayList(); 

foreach (DataRow dataRow in ((DataTable)dataGrid.DataSource).Rows) 
{ 
    rows.Add(String.Join(";", (string[])dataRow.ItemArray)); 
} 
+0

你的意思是“;”并且不是“,”in rows.Add(String.Join(“,”,(string [])dataRow.ItemArray)); ? – 2010-08-26 09:18:48

+0

我怀疑转换为'string []'通常会失败。 – Timwi 2010-08-26 09:25:43

+0

@数据库 - 是的,修复它,谢谢! @Timwi - 我问什么数组项目类型,它看起来像他只希望字符串 – thelost 2010-08-26 10:58:58

0

这里是我的理论: 这是我用它来写一个C​​SV文件,一个DataTable一个代码片段:

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 ...流等..

+0

感谢您解决这个问题,我会发现如何正确放置代码 – MikeAinOz 2010-08-26 22:11:17