关于一个linq的嵌套循环中生成单据的问题
金蝶云社区-yufugen
yufugen
0人赞赏了该文章 781次浏览 未经作者许可,禁止转载编辑于2016年10月15日 08:52:39

[code]#region 生成费用申请预提单
IBillView billView = this.CreateNewBillView("XDD_ExpRequestSplit");
// 新建一个空白物料
// billView.CreateNewModelData();
((IBillViewService)billView).LoadData();

// 触发插件的OnLoad事件:
// 组织控制基类插件,在OnLoad事件中,对主业务组织改变是否提示选项进行初始化。
// 如果不触发OnLoad事件,会导致主业务组织赋值不成功
DynamicFormViewPlugInProxy eventProxy = billView.GetService();
eventProxy.FireOnLoad();

#region 填充单据字段信息
IDynamicFormViewService dynamicFormView = billView as IDynamicFormViewService;
//单据类型
string billTypeId = "";
#region 获取单据类型内码
switch (billTypeNo)
{
case "FYSQ01": //费用申请单
billTypeId = common.GetBillTypeId(this.Context, "FYYT01", "费用申请预提单", "XDD_ExpRequestSplit");
break;

case "FYSQ02": //销售活动费用申请
billTypeId = common.GetBillTypeId(this.Context, "FYYT02", "销售活动费用申请预提", "XDD_ExpRequestSplit");
break;

case "FYSQ03": //推广活动费用申请
billTypeId = common.GetBillTypeId(this.Context, "FYYT03", "推广活动费用申请预提", "XDD_ExpRequestSplit");
break;

case "FYSQ04": //差旅费用申请单
billTypeId = common.GetBillTypeId(this.Context, "FYYT04", "差旅费用申请预提单", "XDD_ExpRequestSplit");
break;

case "FYSQ05": //借款申请单
billTypeId = common.GetBillTypeId(this.Context, "FYYT05", "借款申请预提单", "XDD_ExpRequestSplit");
break;
}
#endregion
dynamicFormView.SetItemValueByID("FBillTypeId", billTypeId, 0); //单据类型
dynamicFormView.SetItemValueByID("FOrgId", orgId, 0); //组织
dynamicFormView.UpdateValue("FBegDate", 0, q.FBegDate); //开始日期
dynamicFormView.UpdateValue("FEndDate", 0, q.FEndDate); //结束日期
dynamicFormView.SetItemValueByID("FRequesterId", requesterId, 0); //申请人
dynamicFormView.SetItemValueByID("FRegionId", regionId, 0); //大区
dynamicFormView.SetItemValueByID("FLiaisonId", liaisonId, 0); //联络处
dynamicFormView.SetItemValueByID("FCustId", custId, 0); //客户
dynamicFormView.SetItemValueByID("FDeptId", deptId, 0); //部门
dynamicFormView.UpdateValue("FItemClass", 0, itemClassNo); //往来单位类型
dynamicFormView.SetItemValueByID("FItem", itemId, 0); //往来单位
dynamicFormView.UpdateValue("FRemarks", 0, remarks); //备注

//sQuery.ToList().ForEach(x =>
// {
// billView.Model.CreateNewEntryRow("FEntity");
// int iRow = billView.Model.GetEntryCurrentRowIndex("FEntity");
// dynamicFormView.SetItemValueByID("FExpenseId", x.FExpenseId, iRow); //费用项目
// dynamicFormView.UpdateValue("FReqAmount", iRow, x.FReqAmount); //核定申请金额
// });
foreach (var x in sQuery.ToList())
{
billView.Model.CreateNewEntryRow("FEntity");
int iRow = billView.Model.GetEntryCurrentRowIndex("FEntity");
dynamicFormView.SetItemValueByID("FExpenseId", x.FExpenseId, iRow); //费用项目
dynamicFormView.UpdateValue("FReqAmount", iRow, x.FReqAmount); //核定申请金额
}

#endregion
// 保存物料
OperateOption saveOption = OperateOption.Create();
this.SaveBill(billView, saveOption);
#endregion[/code]

在代码中,dtxx是存储了数据的datatable,第一个linq语句按照FBegDate,FEndDate进行group by,然后在根据group by 后的再对FExpenseId进行group by,然后循环生成单据。执行结果是:不同的FBedDate,FEndDate 会生成不同的单据,这个满足我的需求,但如果相同的FBegDate,FEndDate存在不同的FExpenseId ,只生成了第一条数据,为什么呢??

已解决 ,不是linq的问题,是保存单据体时没有先创建行在进行赋值,因为单据体默认行是一行,所以一直都只有一行数据。
已贴上正确代码