2010-08-26 26 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