C#, DataTable to ArrayList?

前端 未结 5 1741
感情败类
感情败类 2020-12-11 04:19

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

相关标签:
5条回答
  • 2020-12-11 04:38

    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.

    0 讨论(0)
  • 2020-12-11 04:46

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

    0 讨论(0)
  • 2020-12-11 04:47

    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();
    
    0 讨论(0)
  • 2020-12-11 04:47
    ArrayList rows = new ArrayList();
    
    foreach (DataRow dataRow in ((DataTable)dataGrid.DataSource).Rows)
    {
        rows.Add(String.Join(";", (string[])dataRow.ItemArray));
    }
    
    0 讨论(0)
  • 2020-12-11 04:50
    ArrayList aList = new ArrayList(dt.Rows.Count);
    foreach (DataRow row in dt.Rows)
    {
        aList.Add(row);
    }
    
    0 讨论(0)
提交回复
热议问题