如何添加字典<;字符串,列表<;字符串>>;到C#中的DataTable

本文关键字:gt 字符串 lt 何添加 中的 DataTable 列表 添加 字典 | 更新日期: 2023-09-27 18:24:45

我需要将Dictionary<string,List<string>>内容添加到C#中的数据表中。Header列名应为Dictionary中的Key,行应为List<string>内容。我怎样才能拿到它?

代码:

DataTable new_dt = new DataTable();
//Header Columns
foreach (string item in splits)
{
    DataColumn col = new DataColumn(item, typeof(System.String));
    new_dt.Columns.Add(col);
}
foreach (DataColumn col in new_dt.Columns)
{
    //Declare the bound field and allocate memory for the bound field.
    BoundField bfield = new BoundField();
    //Initalize the DataField value.
    bfield.DataField = col.ColumnName;
    //Initialize the HeaderText field value.
    bfield.HeaderText = col.ColumnName;
    //Add the newly created bound field to the GridView.
    gvMatrix.Columns.Add(bfield);
}
//Content Loading
foreach (KeyValuePair<string, List<string>> item in _dict)
{
    string[] ss = item.Value.ToArray();
    foreach (string s in ss)
    {
        DataRow row = new_dt.NewRow();
        row[item.Key] = s;
        new_dt.Rows.Add(row);
    }
}
gvMatrix.DataSource = new_dt;
gvMatrix.DataBind();

如何添加字典<;字符串,列表<;字符串>>;到C#中的DataTable

这应该有效:

        Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();
        int rowcount = table.Rows.Count;
        int columnCount = table.Columns.Count;
        for (int c = 0; c <= columnCount; c++)
        {
            string columnName = table.Columns[c].ColumnName;
            List<string> tempList = new List<string>();
            for (int r = 0; r <= rowcount; r++)
            {
                var row = table.Rows[r];
                if (row[c] != DBNull.Value)
                    tempList.Add((string)row[c]);
                else
                    tempList.Add(null);
            }
            dict.Add(columnName, tempList);
        }

但正如其他人所提到的,将数据表转换为字典并不是一个好主意。注释中提到的具有不同长度的列通常不是问题,因为您不能向列添加值,只能向定义了列的表添加行。如果没有为行中的某一列指定值,则该列将包含DBNull.Value,如果没有将该列设置为AllowDBNull = true,则如果不填充其中一列,则会出现错误。因此,永远不会有列的行数超过其他列,因为这是不可能的。