简体   繁体   English

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

[英]Better way to add comma separated value to a datatable column when adding a new row in datatable

I am adding new row in datatable in which i want to add comma separated value in 1 datatable column . 在datatable中添加新行 ,我想在其中添加逗号分隔的值在1 datatable列中

This is how i am doing: 这就是我在做什么:

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

Is there any better way to do this??? 有没有更好的办法做到这一点???

Put your individual column values into a list and then concatenate them with String.Join : 将您的各个列值放入列表中,然后将它们与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);
 } 

I admit to being a little confused about why you overwrite the "Id" column, but the code above should have the same effect as what you originally posted. 我承认对于为什么覆盖“ Id”列有些困惑,但是上面的代码应该具有与最初发布的效果相同的效果。

If I understood what you want right, here is a sample that depicts a simpler way: 如果我了解您想要的权利,那么以下示例描述了一种更简单的方法:

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));
}

The table: 桌子:

在此处输入图片说明

Output: 输出:

在此处输入图片说明

I think that Veverke answer indicates the absolute best solution for you. 我认为Veverke的答案为您提供了绝对最佳的解决方案。 I just right tried to assemble your code integrating his solution... 我正好尝试将您的代码集成到他的解决方案中...

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 
} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM