页面多Grid同时修改写法

前台三个DO事件,预处理,处理以及取消事件

预处理中判断是否选中记录,因为是两个Grid,用两个if判断选中记录的行数,如果页面有新增按钮的话需要去除页面新增的数据代码在修改代码下面,若页面无修改则不用加

#region 修改
        private void FormPSSMMACS13_EF_PRE_DO_F3(object sender, EF.EF_Args e)
        {
            //去掉画面上没变过值的数据
            for (int i = 0; i < gridView1.DataRowCount; i++)
            {
                if (gridView1.GetDataRow(i).RowState == DataRowState.Unchanged)
                {
                    gridView1.SetRowCellValue(i, this.efDevGrid1.SelectionColumn, false);

                }
            }

            //去掉画面上没变过值的数据
            for (int i = 0; i < gridView3.DataRowCount; i++)
            {
                if (gridView3.GetDataRow(i).RowState == DataRowState.Unchanged)
                {
                    gridView3.SetRowCellValue(i, this.efDevGrid3.SelectionColumn, false);

                }
            }

            int rowCount1 = this.efDevGrid1.GetSelectedDataRow().Rows.Count;
            int rowCount2 = this.efDevGrid3.GetSelectedDataRow().Rows.Count;
            int rowCount = rowCount1 + rowCount2;//页面变化记录总数
            if (rowCount <= 0)
            {
                this.EFMsgInfo = "没有需要修改的记录!";
                this.ef_args.buttonStatusHold = true;
                return;
            }

            this.EFMsgInfo = "将修改" + rowCount.ToString() + "条记录,请确认或取消操作。";
        }

        private void FormPSSMMACS13_EF_DO_F3(object sender, EF.EF_Args e)
        {
            if (tableName == "H")
            {
                this.EFMsgInfo = "历史数据不需修改!";
                this.ef_args.buttonStatusHold = true;
                return;
            }
            EI.EIInfo inInfo = new EI.EIInfo();
            EI.EIInfo outInfo = new EI.EIInfo();

            DataTable dt = this.efDevGrid1.GetSelectedDataRow();
            DataTable dt1 = this.efDevGrid3.GetSelectedDataRow();
            inInfo.Tables[0].Merge(dt);
            inInfo.Tables.Add();
            inInfo.Tables[1].Merge(dt1);
            inInfo.Tables.Add();
            inInfo.Tables[2].Columns.Add("COLSNAME1");//用于动态传入需要修改的列,列较多的时候使用
            inInfo.Tables[2].Columns.Add("COLSNAME2");
            inInfo.Tables[2].Rows.Add();

            inInfo.Tables[2].Rows[0]["COLSNAME1"] = Grid_Style.GetColsName(efDevGrid1, gridView1);//封装的获取列的方法,对与特殊处理的列需要在方法里跳过处理


            inInfo.Tables[2].Rows[0]["COLSNAME2"] = Grid_Style.GetColsName(efDevGrid3, gridView3);

            EI.EIInfo outBlock = EI.EIManager.Instance.CallService("MA1RM", "pssmmacs13_upd", inInfo);
            if (outBlock.sys_info.flag < 0)
            {
                this.EFMsgInfo = outBlock.sys_info.msg + "\n" + outBlock.sys_info.sysmsg;
            }
            else
            {
                Query();
                this.EFMsgInfo = "修改成功!";
            }


        }
//去掉画面上新增的数据
            int count = 0;
            for (int i = 0; i < gridView1.DataRowCount + count; i++)
            {

                if (gridView1.GetDataRow(i - count).RowState == DataRowState.Added ||
                    gridView1.GetDataRow(i - count).RowState == DataRowState.Detached)
                {
                    gridView1.SetRowCellValue(i - count, this.efDevGrid1.SelectionColumn, false);
                    gridView1.GetDataRow(i - count).RejectChanges();
                    count++;
                }
            }

后台对应的代码如下,判断两个grid是否都有改动(判断inblock中的表数据是否有值)

try
    {
        //获取前台输入数据
        colsname1 = bcls_rec->Tables[2].Rows[0]["COLSNAME1"].ToString().Trim();//需要查询的列
        Log::Trace("", __FUNCTION__, "colsname1={0} ", colsname1);
        colsname2 = bcls_rec->Tables[2].Rows[0]["COLSNAME2"].ToString().Trim();//需要查询的列
        Log::Trace("", __FUNCTION__, "colsname2={0} ", colsname2);
        if (bcls_rec->Tables[0].Rows.get_Count() > 0){
            Log::Trace("", __FUNCTION__, "修改={0} ", "制造命令信息");
            for (int i = 0; i < bcls_rec->Tables[0].Rows.get_Count(); i++)
            {
                // 取得单行传入信息 
                tpssmma01.Reset();
                tpssmma01.MergeFrom(bcls_rec->Tables[0].Rows[i]);

                //设置修改者信息
                tpssmma01.REC_REVISOR = s.userid;
                tpssmma01.REC_REVISE_TIME = datetimeNow;
                tpssmma01.Update('"'+colsname1+'"', " PONO");
                
            }
            if (bcls_rec->Tables[1].Rows.get_Count() > 0){
                Log::Trace("", __FUNCTION__, "修改={0} ", "板坯命令信息");
                for (int i = 0; i < bcls_rec->Tables[1].Rows.get_Count(); i++)
                {
                    // 取得单行传入信息 
                    tpssmma03.Reset();
                    tpssmma03.MergeFrom(bcls_rec->Tables[1].Rows[i]);

                    //设置修改者信息
                    tpssmma03.REC_REVISOR = s.userid;
                    tpssmma03.REC_REVISE_TIME = datetimeNow;
                    tpssmma03.Update(colsname2, " PONO");
                    
                }
            }
        }
        
    }
    catch (CDbException& ex)  //捕获数据库操作异常
    {
        CFormattable arguments[] = { ex.GetCode() };
        CMessageFormat::Format(s.msg, _RES("GCRSS0000021")/*信息读取失败。*/, arguments, 1);
        CString str = sqlstr + "\r\n" + ex.GetMsg();
        strncpy(s.sysmsg, (const char*)str, sizeof(s.sysmsg) - 1);
        s.flag = -1;
        doFlag = -1; //数据库异常时返回-1,事务将被回滚
    }
    catch (const CApplicationException& ex)
    {
        s.flag = ex.GetCode();
        doFlag = -1;
    }
    catch (CException& ex)
    {
        strncpy(s.msg, (const char*)ex.GetMsg(), sizeof(s.msg) - 1);
        s.flag = ex.GetCode();
        doFlag = -1;
    }

    return(doFlag);

 

posted @ 2021-03-11 19:48  gitee1412  阅读(136)  评论(0)    收藏  举报