[英]Better way to add comma separated value to a datatable column when adding a new row in datatable
我在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
}
}
有沒有更好的辦法做到這一點???
將您的各個列值放入列表中,然后將它們與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”列有些困惑,但是上面的代碼應該具有與最初發布的效果相同的效果。
如果我了解您想要的權利,那么以下示例描述了一種更簡單的方法:
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));
}
桌子:
輸出:
我認為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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.