У меня есть таблица данных с несколькими строками, в каждой строке есть несколько столбцов.
Я хочу создать arraylist, который объединяет все строки в строку
поэтому каждый элемент массива выглядит следующим образом {1; qwqww; qweqweqwe; qweqweqw; qwe}
Элементы в строке будут разделены символами ;
и это решение .NET 2
Спасибо
Вот действительно работающее решение.
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>();
Остальной код такой же.
ArrayList rows = new ArrayList();
foreach (DataRow dataRow in ((DataTable)dataGrid.DataSource).Rows)
{
rows.Add(String.Join(";", (string[])dataRow.ItemArray));
}
Вместо использования 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();
Вот моя теория: Это фрагмент кода, который я использую для написания 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 и т. д....