private void grdRouters_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(WorkUnit)))
            {
                WorkUnit source = (WorkUnit)e.Data.GetData(typeof(WorkUnit));

                // 获取鼠标拖放位置
                point = grdRouters.PointToClient(new Point(e.X, e.Y));
                DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hi = grdvRouters.CalcHitInfo(point);

                if (hi.RowHandle >= 0 && hi.RowHandle < routers.Count)
                {
                    if (hi.Column == grdclmnCurrWorkUnit)
                    {
                        if (routers[hi.RowHandle].NextWorkUnit.T107LeafID == source.T107LeafID)
                        {
                            XtraMessageBox.Show("当前工位和下一工位不能是相同的工位!",
                                                "系统信息",
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Error);
                        }
                        else
                        {
                            routers[hi.RowHandle].CurrWorkUnit = source.Clone();
                            ArrangeReworkRouters();
                        }
                    }
                    else if (hi.Column == grdclmnPrevWorkUnit)
                    {
                        if (routers[hi.RowHandle].CurrWorkUnit.T107LeafID == source.T107LeafID)
                        {
                            XtraMessageBox.Show("当前工位和下一工位不能是相同的工位!",
                                                "系统信息",
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Error);
                        }
                        else
                        {
                            routers[hi.RowHandle].NextWorkUnit = source.Clone();
                            ArrangeReworkRouters();
                        }
                    }
                }
                else
                {
                    GUIReworkRouter router = new GUIReworkRouter()
                    {
                        CurrWorkUnit = source.Clone()
                    };
                    routers.Add(router);
                    grdvRouters.FocusedRowHandle = routers.Count - 1;
                    ArrangeReworkRouters();
                }
            }
        }
        /// <summary>
        /// 获取指定返工工单的返工路由表
        /// </summary>
        private void GetPWOReworkRoutingTBL()
        {
            string strProcedureName = string.Format("{0}.{1}",
                                                    className,
                                                    MethodBase.GetCurrentMethod().Name);

            WriteLog.Instance.WriteBeginSplitter(strProcedureName);
            try
            {
                List <ReworkRouter> reworkRoutingTBL = new List <ReworkRouter>();
                if (pwo != null)
                {
                    WriteLog.Instance.Write("获取指定返工工单的返工路由表", strProcedureName);
                    try
                    {
                        int    errCode = 0;
                        string errText = "";

                        IRAPMESClient.Instance.ufn_GetReworkRoutingTBL(
                            IRAPUser.Instance.CommunityID,
                            pwo.TF482PK,
                            pwo.PWOIssuingFactID,
                            IRAPUser.Instance.SysLogID,
                            ref reworkRoutingTBL,
                            out errCode,
                            out errText);
                        WriteLog.Instance.Write(string.Format("({0}){1}", errCode, errText), strProcedureName);

                        if (errCode == 0 && reworkRoutingTBL.Count > 0)
                        {
                            foreach (ReworkRouter router in reworkRoutingTBL)
                            {
                                GUIReworkRouter guiRouter = new GUIReworkRouter();
                                guiRouter.Ordinal      = router.Ordinal;
                                guiRouter.CurrWorkUnit = GetWorkUnitWithLeafID(router.T107LeafID1);
                                guiRouter.NextWorkUnit = GetWorkUnitWithLeafID(router.T107LeafID2);

                                routers.Add(guiRouter);
                            }
                            ArrangeReworkRouters();
                        }
                    }
                    catch (Exception error)
                    {
                        WriteLog.Instance.Write(error.Message, strProcedureName);
                    }
                }
            }
            finally
            {
                WriteLog.Instance.WriteEndSplitter(strProcedureName);
            }
        }
        private void miMoveDown_Click(object sender, EventArgs e)
        {
            int index = grdvRouters.GetFocusedDataSourceRowIndex();

            if (index >= 0 && index < routers.Count)
            {
                GUIReworkRouter router = routers[index];
                routers.Remove(router);
                routers.Insert(index + 1, router);

                ArrangeReworkRouters();
            }
        }