代码之家  ›  专栏  ›  技术社区  ›  Learning-Overthinker-Confused

在数据表中添加新行时,向数据表列添加逗号分隔值的更好方法

  •  2
  • Learning-Overthinker-Confused  · 技术社区  · 8 年前

    我正在添加 数据表中的新行 其中我想在中添加逗号分隔值 1个数据表列 .

    我就是这样做的:

    var dt = new DataTable();
    
    var data=Helper.GetData();
    
     foreach (DataRow dr in data)
     {
          DataRow dr = dt.NewRow();
          var append = new StringBuilder();
          var columns=Helper.GetColumns();
    
          char[] characters = new char[] { ' ', ',' };
          foreach(var item in columns)
          {
              if (columns.Count()==1)
              {
                   dr["Id"] = dr[item].ToString();
                   dr["Col1"] = dr[item].ToString();
              }
              else
              {
                   dr["Id"] = dr[item].ToString();
                   append.Append(dr[item].ToString() + ", ");
              }
          }
          if (columns.Count() > 1)
          {
              dr["Col1"] = append.ToString().TrimEnd(characters);//remove comma from the end
          }    
     } 
    

    有更好的方法吗???

    3 回复  |  直到 8 年前
        1
  •  3
  •   Jim Mischel    8 年前

    将各个列值放入列表中,然后用 String.Join :

    var dt = new DataTable();
    
    var data=Helper.GetData();
    
     foreach (DataRow dr in data)
     {
          List<string> values = new List<string>();
          DataRow dr = dt.NewRow();
    
          var columns=Helper.GetColumns();
    
          foreach(var item in columns)
          {
              dr["Id"] = dr[item].ToString();
              values.Add(dr[item].ToString());
          }
          dr["Col1"] = string.Join(",", values);
     } 
    

    我承认对为什么要覆盖“Id”列有点困惑,但上面的代码应该与最初发布的代码具有相同的效果。

        2
  •  2
  •   Veverke    8 年前

    如果我明白你想要什么,这里有一个简单的例子:

    DataTable dt = new DataTable("SO Example");
    
    dt.Columns.Add("A", typeof(int));
    dt.Columns.Add("B", typeof(string));
    dt.Columns.Add("C", typeof(string));
    dt.Columns.Add("D", typeof(string));
    dt.Columns.Add("Concatenation", typeof(string));
    
    dt.Rows.Add(1, "bbbbbb", "tra la la", "d");
    dt.Rows.Add(2, "b b b", "tttt", "dddddd");
    dt.Rows.Add(3, "b-b-b-b-b-b", "C", "d.d.d.d.d.d");
    dt.Rows.Add(4, "bBbBbBb", "CCC", "dd");
    dt.Rows.Add(5, "B", "C", "D");
    
    foreach (DataRow row in dt.Rows)
    {
        row["Concatenation"] = string.Join(", ", row.ItemArray.Take(row.ItemArray.Length - 1));
    }
    

    表格:

    enter image description here

    输出:

    enter image description here

        3
  •  1
  •   Community CDub    7 年前

    我想是的 Veverke 答案表明绝对是最适合你的解决方案。 我刚刚尝试将你的代码集成到他的解决方案中。。。

    var dt = new DataTable();
    var data=Helper.GetData();
    foreach (DataRow drSrc in data) //changed from "dr" in "drSrc" to readability (further, compiler should rises a syntax error)
    {
       DataRow dr = dt.NewRow();
    
       dr["id"] = drSrc[drSrc.ItemArray.Length - 2]; //the last value of drSrc (after clarifications in comments and chat..)
       dr["Col1"]  = string.Join(", ", drSrc.ItemArray.Take (drSrc.ItemArray.Length - 1));
    
       dt.Rows.Add(dr);  //it missed in your code, but I suppose you want add it into the datatable 
    }