C#, DataTable to ArrayList?

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-09 11:10:11

问题


I have a datatable with few rows each row has few columns.
I want to create an arraylist that countain all row as a string
so each array item look like this {1;qwqww;qweqweqwe;qweqweqw;qwe}
The items in the string will be separated with ; and it is a .NET 2 solution

Thanks


回答1:


Here is a solution that actually works.

ArrayList rows = new ArrayList();

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

However, I feel I should point out that it is unwise to use the obsolete ArrayList. Use List<string> instead, since the rows are strings:

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

The rest of the code is the same.




回答2:


Instead of using an ArrayList I would recommend you using a strongly typed collection because an ArrayList wouldn't bring much value compared to a non-strongly typed DataTable. So you could start by defining a model that will represent each row:

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

then loop over your DataTable and fill the collection:

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

Or you could use LINQ if you prefer:

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:


ArrayList rows = new ArrayList();

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



回答4:


Here's my theory: This is a code fragment that I use to write a CSV for a 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');
    }
}

Use StringBuffer instead of WriteItem ... stream etc...




回答5:


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


来源:https://stackoverflow.com/questions/3573618/c-datatable-to-arraylist

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!