TPurchase tPur = dao.GetPurchase(id);   //取入库单组合实体
                PurchaseContent content = tPur.Content; //取入库单主内容实体
                if (content.AuditFlag == true)  //如果入库单已审核
                {
                    throw new Exception("该单据已经审核" + content.PurchaseBillCode);
                }
                foreach (TPurchaseDetail tPurDetail in tPur.Detail) //遍历入库单货品
                {
                    TPurchaseDetail tPruDetail = new TPurchaseDetail();
                    Store storeParam = new Store(); 
                    storeParam.Warehouse = tPur.Content.WareHouse;
                    storeParam.ProductCode = tPurDetail.DetDetail.ProductCode;
                    Store sto = null;
                    //根据仓库、货品代码取库存表中该货品信息
                    sto = daoStore.GetStore(storeParam);    
                    if (sto == null)//库存中没有该货品
                    {
                        sto = new Store();  //创建库存表实例
                        sto.Warehouse = tPur.Content.WareHouse;
                        sto.ProductCode = tPurDetail.DetDetail.ProductCode;
                        sto.Quantity = tPurDetail.DetDetail.Quantity;
                        sto.Price = tPurDetail.DetDetail.Price;
                        sto.Amount = sto.Quantity * sto.Price;
                        daoStore.InsertInfo(sto);   //将该货品信息插入到库存表
                        sto.Memo = "";
                    }
                    else  //库存中有该货品
                    {
                        sto.Quantity += tPurDetail.DetDetail.Quantity;  //累加货品数量
                        //累加计算货品金额
                        sto.Amount += tPurDetail.DetDetail.Quantity * tPurDetail.DetDetail.Price;
                        if (sto.Quantity >0)
                            sto.Price = sto.Amount / sto.Quantity;  //根据金额、数量计算单价
                        daoStore.UpdateInfo(sto);   //更新库存表
                    }
                }
                content.AuditFlag = isAudit;    //入库审核标志
                content.Operator = operatorCode;
                content.OperateDate = DateTime.Now;
                dao.UpdateInfo(content);    //更新入库单的审核标志
                ts.Complete();  //提交事务程序运行到此次出,          //根据仓库、货品代码取库存表中该货品信息
显示:没有为当前数据上下文实例启用对象跟踪说明:本人是初级学习C#数据库,这几年一直在用心学习C#数据库编程,也买了不少书,以前在2.0 的环境还能奏户看下一个小系统,对于3.5的版本系统,真是感觉有点头大的感觉。是莱鸟,虚心向各位大侠学习。最近急得真想去蹲到大学门前,向那些学生请教。希望能帮助我的朋友和老师帮助我一把!真诚求助!问题描述不清,我可以把希望发给你们,我是买了实战突击Asp.net项目开发案例整合的一本书的里面最后一个系统,因为里面的案例跟我正在学习开发有关,所以恳请各位指教!

解决方案 »

  1.   


                        //根据仓库、货品代码取库存表中该货品信息
                        sto = daoStore.GetStore(storeParam);   
    1.daoStore从哪来? 如果有声明。 把代码贴全2.GetStore这个方法里的操作也贴上代码!!3.storeParam 你这个参数传的是个model。 如果获取某条数据.参数设置为标识 岂不是更好。
      

  2.   

    改成这样试试:                   TPurchaseDetail tPruDetail = new TPurchaseDetail();
                        Store storeParam = new Store(); 
                        storeParam.Warehouse = tPur.Content.WareHouse;
                        storeParam.ProductCode = tPurDetail.DetDetail.ProductCode;
                        Store sto = daoStore.GetStore(storeParam);  
                        //根据仓库、货品代码取库存表中该货品信息这种操作还是最好一次性解决。你这个storeParam model实例。你也只给两个字段赋了值。                   TPurchaseDetail tPruDetail = new TPurchaseDetail();
                  Store sto = daoStore.GetStore(tPur.Content.WareHouse,tPurDetail.DetDetail.ProductCode);  
                        //根据仓库、货品代码取库存表中该货品信息
      

  3.   


    namespace MRErp.ServiceProvider.Dao
    {
        internal class StoreDao
        {
            private static MRErpDataContext dc;        public StoreDao()
            {
                if (dc == null)
                {
                    dc = new MRErpDataContext(ConnectionManager.ConnectionString);
                }
            }
      /// <summary>
            /// 根据仓库,商品代码获得库存实体
            /// </summary>
            /// <param name="obj">只需传入仓库代码,商品代码即可</param>
            /// <returns>库存实体</returns>
            public Store GetStore(Store obj)
            {
                return dc.Store.FirstOrDefault(itm => itm.Warehouse == obj.Warehouse && itm.ProductCode == obj.ProductCode);
            }3.storeParam 你这个参数传的是个model。 如果获取某条数据.参数设置为标识 岂不是更好。
    这个参数我还真是不清楚,如果可以的话,我把源码发给你,帮我看看吧,谢谢!
      

  4.   

    PurchaseStockAudit.aspx.cs 中代码/// <summary>
    /// 入库确认
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnAudit_Click(object sender, EventArgs e)
    {
    int cnt = 0;
    foreach (GridViewRow row in dgvInfo.Rows) //遍历GridView所有的行
    {
    bool chk = ((CheckBox)row.Cells[1].FindControl("chkAuditFlag")).Checked;
    if (chk) //判断该行是行被选中
    {
    cnt++;
    //取GridView行主键值
    string tempId = dgvInfo.DataKeys[row.RowIndex].Value.ToString();
    string billCode = row.Cells[2].Text; //取GridView行单据号内容
    if (!string.IsNullOrEmpty(tempId))
    {
    try
    {
    //调用业务层入库单审核方法
    PurchaseService.Instance.AuditPurchase(Convert.ToInt32(tempId), true, Context.User.Identity.Name);
    ((CheckBox)row.Cells[1].FindControl("chkAuditFlag")).Checked = false;
    }
    catch
    {
    throw new Exception("单据号" + billCode + "审核失败");
    }
    }
    }
    }
    调用 PurchaseService.cs 中 
    /// <summary>
    /// 入库单审核确认
    /// </summary>
    /// <param name="id"></param>
    /// <param name="isAudit"></param>
    /// <param name="operatorCode"></param>
    /// <returns></returns>
    public bool AuditPurchase(int id, bool isAudit, string operatorCode)
    {.......
    Store storeParam = new Store(); 
    storeParam.Warehouse = tPur.Content.WareHouse;
    storeParam.ProductCode = tPurDetail.DetDetail.ProductCode;
    Store sto = null;
    //根据仓库、货品代码取库存表中该货品信息
    sto = daoStore.GetStore(storeParam);   在这里我该为  Store   sto = daoStore.GetStore(storeParam);    if (sto == null)//库存中没有该货品
    {.......调用 StoreDao.cs 中的 
    /// <summary>
    /// 根据仓库,商品代码获得库存实体
    /// </summary>
    /// <param name="obj">只需传入仓库代码,商品代码即可</param>
    /// <returns>库存实体</returns>
    public Store GetStore(Store obj)
    {
    return dc.Store.FirstOrDefault(itm => itm.Warehouse == obj.Warehouse && itm.ProductCode == obj.ProductCode);
    }报错为:从查询中返回了结果后,将无法修改数据上下文选项。这个怎么解决??????????谢谢,麻烦了!