我有兩個DataTable中的DataSet,MasterTable具有PK關係鏈接到DetailTable。我知道表達可以幫助總結孩子像使用DataColumn的Expression屬性從ChildRows獲取拼接文本
dtMaster.Columns.Add(new DataColumn("TotalQty", 0, "Sum(child.Qty)"));
的價值,但我需要concate字符串,如
dtMaster.Columns.Add(new DataColumn("HasErrors", 0, "Concat(child.ErrorText + ';')"));
我知道列表達式不支持CONCAT,所以現在,我需要檢測Table.ColumnChanging事件來手動設置主控的HasError字段值。
有人可以幫我一個更自動的方式嗎?
這裏是我的示例代碼
internal static void Test()
{
var ds = new DataSet();
var dtMaster = ds.Tables.Add("Master");
var colIDMaster = dtMaster.Columns.Add("ID");
var dtDetail = ds.Tables.Add("Detail");
var colIDDetail = dtDetail.Columns.Add("ID");
dtDetail.Columns.Add("CID");
dtDetail.Columns.Add("Qty", typeof(int));
dtDetail.Columns.Add("ErrorText", typeof(string), "IIF(Qty is null, 'Qty err', '')");
ds.Relations.Add("m2d", colIDMaster, colIDDetail, false);
//I know I can do this
dtMaster.Columns.Add("TotalQty", typeof(int), "Sum(child.Qty)");
//here is I am asking solution
//dtMaster.Columns.Add("ContainErrors", typeof(string), "Concat(child.ErrorText + ';')");
var newMasterRow = dtMaster.NewRow();
newMasterRow["ID"] = "A";
dtMaster.Rows.Add(newMasterRow);
var newDetailRow = dtDetail.NewRow();
newDetailRow["ID"] = "A";
newDetailRow["CID"] = "D1";
newDetailRow["Qty"] = DBNull.Value;
dtDetail.Rows.Add(newDetailRow);
newDetailRow = dtDetail.NewRow();
newDetailRow["ID"] = "A";
newDetailRow["CID"] = "D2";
newDetailRow["Qty"] = 10;
dtDetail.Rows.Add(newDetailRow);
//now I can loop and print the master row with ID and it's ErrorTexts
}
感謝您的幫助
請詳細說明,更多的這個問題 –
添加示例代碼,我希望我可以看到主人的行[0] [「ContainErrors」]有文字「數量走錯了路。 ...'< - 如果多於一個孩子的ErrorText –