我有一个数据表少数行每列有几列。
我想创建countain所有行作为一个字符串的ArrayList
所以每个数组项是这样{1;qwqww;qweqweqwe;qweqweqw;qwe}
字符串中的项目将与;
分开,这是一个.NET 2溶液C#,DataTable到ArrayList?
谢谢
我有一个数据表少数行每列有几列。
我想创建countain所有行作为一个字符串的ArrayList
所以每个数组项是这样{1;qwqww;qweqweqwe;qweqweqw;qwe}
字符串中的项目将与;
分开,这是一个.NET 2溶液C#,DataTable到ArrayList?
谢谢
这里一个实际可行的解决方案。
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>();
其余代码是相同的。
谢谢,但dataRow.ItemArray.Select(item => item.ToString)不适合我! 我正在使用.NET v2有什么关系吗? – 2010-08-26 10:04:21
我得到“无法解析符号选择”!!! – 2010-08-26 10:29:29
@数据库:在文件顶部添加'使用System.Linq;'。 – Timwi 2010-08-27 04:20:55
而不是使用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();
不错,但是如果数据表中的行变化并且不总是3呢? – w69rdy 2010-08-26 09:19:37
ArrayList aList = new ArrayList(dt.Rows.Count);
foreach (DataRow row in dt.Rows)
{
aList.Add(row);
}
项目将如何在字符串中分离?是由“,”还是“;”? – 2010-08-26 09:19:58
不工作,他希望每个数组项目作为单个字符串,而不是数据行 – w69rdy 2010-08-26 09:21:05
哦..我错过了他的问题中的这个事实! – 2010-08-26 09:48:33
ArrayList rows = new ArrayList();
foreach (DataRow dataRow in ((DataTable)dataGrid.DataSource).Rows)
{
rows.Add(String.Join(";", (string[])dataRow.ItemArray));
}
这里是我的理论: 这是我用它来写一个CSV文件,一个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 ...流等..
感谢您解决这个问题,我会发现如何正确放置代码 – MikeAinOz 2010-08-26 22:11:17
所有列包含字符串? – thelost 2010-08-26 09:12:56
yes(one is boolean)but it will be used as“true”“false” – 2010-08-26 09:20:51
[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