views:

74

answers:

5

hello,

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  A: 

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();
Darin Dimitrov
Nice, but what if the rows in the datatable varied and wasn't always 3?
w69rdy
A: 
ArrayList aList = new ArrayList(dt.Rows.Count);
foreach (DataRow row in dt.Rows)
{
    aList.Add(row);
}
Anil
how the items will be separated in the string? is it by "," or ";"?
Data-Base
Doesn't work, he wants each array item as a single string, not a datarow
w69rdy
oh.. I missed that fact in his question!
Anil
+1  A: 
ArrayList rows = new ArrayList();

foreach (DataRow dataRow in ((DataTable)dataGrid.DataSource).Rows)
{
    rows.Add(String.Join(";", (string[])dataRow.ItemArray));
}
thelost
you mean ";" andnot "," in rows.Add(String.Join(",", (string[])dataRow.ItemArray)); ?
Data-Base
I suspect that the cast to `string[]` will generally fail.
Timwi
@Data-Base - yes, fixed it, thanks!@Timwi - I asked what the array items type would be, it looks like he only expects string
thelost
+6  A: 

Here is a solution that actually works :-p

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.

Timwi
Thanks, but dataRow.ItemArray.Select(item => item.ToString) does not work for me!I'm using .NET v2 is there any thing to do with it ?
Data-Base
I get "Can not resolve symbol Select" !!!
Data-Base
@Data-Base: Add `using System.Linq;` at the top of the file.
Timwi
A: 

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

MikeAinOz
Thanks for fixing that, I'll find out how to put code in properly
MikeAinOz