C #, DataTable to ArrayList?

У меня есть таблица данных с несколькими строками, в каждой строке есть несколько столбцов.
Я хочу создать arraylist, который объединяет все строки в строку
поэтому каждый элемент массива выглядит следующим образом {1; qwqww; qweqweqwe; qweqweqw; qwe}
Элементы в строке будут разделены символами ; и это решение .NET 2

Спасибо

8
задан hims056 23 August 2012 в 09:51
поделиться

4 ответа

Вот действительно работающее решение.

ArrayList rows = new ArrayList();

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

Тем не менее, я считаю, что должен указать, что неразумно использовать устаревший ArrayList. Вместо этого используйте List, так как строки являются строками:

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

Остальной код такой же.

10
ответ дан 5 December 2019 в 17:32
поделиться
ArrayList rows = new ArrayList();

foreach (DataRow dataRow in ((DataTable)dataGrid.DataSource).Rows)
{
    rows.Add(String.Join(";", (string[])dataRow.ItemArray));
}
1
ответ дан 5 December 2019 в 17:32
поделиться

Вместо использования ArrayList я бы рекомендовал вам использовать строго типизированную коллекцию, потому что ArrayList не принесет большой пользы по сравнению с не строго типизированной DataTable. Таким образом, вы можете начать с определения модели, которая будет представлять каждую строку:

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();
1
ответ дан 5 December 2019 в 17:32
поделиться

Вот моя теория: Это фрагмент кода, который я использую для написания CSV для таблицы данных:

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... stream и т. д....

0
ответ дан 5 December 2019 в 17:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: