合并数据表的列

时间:2016-09-22 07:15:50

标签: c# datatable

我正在阅读一个“.xml”文件,我将从中创建一个数据表。数据表的列取决于“.xml”文件。 以下是示例。 enter image description here

如示例所示,data1,data2,data3 ......等将从.xml文件中获取。数据(a,b,c,d,as,asd ......等)是相对于列标题(item1,item2,item3 ......等)添加的。

我想根据行的内容合并列。即第一列(第1项)的data1应与第4列(第4项)的data1合并,第4列应删除。有可能吗?

以下是预期输出: enter image description here

2 个答案:

答案 0 :(得分:2)

请这样做:

static DataTable GetTable()
    {
        // Here we create a DataTable with four columns.
        DataTable table = new DataTable();
        table.Columns.Add("Item1", typeof(string));
        table.Columns.Add("Item2", typeof(string));
        table.Columns.Add("Item3", typeof(string));
        table.Columns.Add("Item4", typeof(string));

        // Here we add five DataRows.
        table.Rows.Add("a", "as", "asd", "");
        table.Rows.Add("b", "asd", "asd", "");
        table.Rows.Add("c", "a", "asd", "");
        table.Rows.Add("d", "a", "asd", "");
        table.Rows.Add("", "", "", "a");
        table.Rows.Add("", "", "", "d");
        table.Rows.Add("", "", "", "asd");
        return table;
    }

    DataTable dt = GetTable();
    foreach (DataRow dr in dt.Rows)
    {
        if (!String.IsNullOrEmpty(dr["Item4"].ToString()) && String.IsNullOrEmpty(dr["Item1"].ToString()))
        {
            dr["Item1"] = dr["Item4"].ToString(); //assign value of column 4 to column1 
        }
    }
    dt.Columns.Remove("Item4"); //delete column 4

答案 1 :(得分:1)

  public DataTable CombileDataTable(DataTable dt1, DataTable dt2)
    {
        DataTable dtNew = new DataTable();
        foreach (DataColumn col in dt1.Columns)
        {
            dtNew.Columns.Add(col.ColumnName);
        }
        foreach (DataColumn col in dt2.Columns)
        {
            dtNew.Columns.Add(col.ColumnName);
        }

        for(int i=0; i<dt1.Rows.Count; i++)
        {
            DataRow item = dtNew.NewRow();
            foreach (DataColumn col in dt1.Columns)
            {
                item[col.ColumnName] = dt1.Rows[i][col.ColumnName];
            }
            foreach (DataColumn col in dt2.Columns)
            {
                item[col.ColumnName] = dt2.Rows[i][col.ColumnName];
            }
            dtNew.Rows.Add(item);
            dtNew.AcceptChanges();              
        }       
        return dtNew;
    }