C#中的DataTable列

btm*_*ach 1 c# datatable list

我目前有这个代码,我知道如何打印行,但我无法弄清楚如何获取我的列标题?我不想使用我已经注释掉的解决方案,因为我想使代码通用,以便我也可以将它用于其他列表.

static DataTable ConvertListToDataTable(List<List<string>> list)
{
    // New table.
    DataTable table = new DataTable();

    /* table.Columns.Add("Employee ID");
       table.Columns.Add("First Name");
       table.Columns.Add("Last Name");
       table.Columns.Add("Job Title");
       table.Columns.Add("Address");
       table.Columns.Add("City"); 
    */

    foreach(List<string> row in list) {
        table.Rows.Add(row.ToArray());
    }

    return table;
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 6

List<List<string>>由于信息根本不可用,因此无法从列标题中获取列标题.您可以为每个参数提供它们:

static DataTable ConvertListToDataTable(List<List<string>> list, IList<string> columnNames)
{
    DataTable table = new DataTable();
    foreach (string columnName in columnNames)
        table.Columns.Add(columnName);
    foreach (List<string> row in list)
    {
        if (row.Count != columnNames.Count)
            throw new ArgumentException(string.Format("Invalid data in list, must have the same columns as the columnNames-argument. Line was: '{0}'", string.Join(",", row)), "list");
        DataRow r =  table.Rows.Add();
        for (int i = 0; i < columnNames.Count; i++)
            r[i] = row[i];
    }
    return table;
}
Run Code Online (Sandbox Code Playgroud)

如何使用:

string[] columns = { "Employee ID", "First Name", "Last Name", "Job Title", "Address", "City"};
DataTable tblEmployee = ConvertListToDataTable(employees, columns);
Run Code Online (Sandbox Code Playgroud)

但是,您应该使用自定义类,而不是使用List<List<string>>(或a DataTable)存储您的员工,例如Employee使用所有这些属性.然后你可以填写一个List<Employee>.通过这种方式,您的代码可以更好地阅读和维护.