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

时间:2016-06-28 13:06:47

标签: c# .net for-loop datatable

我在数据表中添加新行,我想在 1 datatable列中添加逗号分隔值。

这就是我的表现:

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 个答案:

答案 0 :(得分:3)

将您的各个列值放入列表中,然后将其与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);
 } 

我承认你为什么要覆盖&#34; Id&#34;列,但上面的代码应该与您最初发布的代码具有相同的效果。

答案 1 :(得分:2)

如果我理解你想要的东西,这里有一个描述更简单方法的样本:

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

答案 2 :(得分:1)

我认为Veverke答案表明绝对是最佳解决方案。 我正好尝试整合他的解决方案组装代码......

public class BaseActivity extends Activity{

    @Override
    public void onResume() {
        super.onResume();
        // check your boolean here and act accordingly

    }

}