APS相关知识点.txt 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. 1.列表中如何添加合计行
  2. OLV(ObjectListView)相关讨论
  3. https://sourceforge.net/p/objectlistview/discussion/825500/thread/e413cafd/
  4. 这里提到wxGrid、wxWindows,可以研究下
  5. https://sourceforge.net/p/objectlistview/discussion/812923/thread/f89adc7c/?limit=25#e197
  6. https://sourceforge.net/p/objectlistview/discussion/812922/thread/7f2bc2f4/
  7. 这里提供了示例,使用AboutToCreateGroups事件计算小计
  8. DataGridView相关讨论
  9. http://stackoverflow.com/questions/5591252/totals-row-in-a-datagridview
  10. 1.在CellPainting事件计算小计并调整TextBox位置
  11. 2.文中引用很好地解决了这个问题(http://www.codeproject.com/Articles/51889/Summary-DataGridView)
  12. OLV应该可以很好的参考这个方法
  13. 这里控件可以很好的解决了汇总的问题,但引入了新的问题:
  14. 1.修改列宽或位置会跳转到每一列
  15. 2.用键盘跳转时,汇总列不会跟随
  16. 上面两个问题都可以通过处理DGV的Scroll事件,过滤掉因列头操作引起的事件。详细可看LJDataGridView中的代码
  17. 2.DataGridView在拖拽列时需要点一下获取焦点再拖才可以,拖的过程中不能使用左/右键进行滚动
  18. 查看源代码发现DataGridView的dataGridViewState1[DATAGRIDVIEWSTATE1_scrolledSinceMouseDown]在操作滚动条后为true导致不能跳转到拖放列模式
  19. 关键代码看DataGridView.OnCellMouseMove
  20. 3.导出Excel,这里使用NPOI,详细使用方法上网查
  21. 4.DataGridView在CellValueChanged事件中修改数据源的值不会马上刷新到界面
  22. 对于CheckBox CellValueChanged事件并不会马上触发
  23. 应该在CurrentCellDirtyStateChanged事件调用DataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit)接受修改,则会马上触发CellValueChanged事件
  24. 在CellValueChanged事件中如果修改了数据源的值,需要调用DataGridView.Refresh() 重绘界面
  25. 5.界面使用锚Anchor时经常出现水平滚动条被挡住的问题
  26. 未有深入研究,但改用Dock就可以解决
  27. 6.DataGridView在创造函数中修改列的Visible有时会无效,值是改了,但实际显示状态不正确
  28. 未有深入研究,但只在初始化时将动态显示的列设成不可视,修改列的Visible前调用BeginInit,修改完后调用EndInit就不会出现这现象
  29. 7.DataGridView如何可以复制单个单元格的内容
  30. 这里说得比较靠谱,但未实践过:http://www.wjxfpf.com/2015/10/643339.html
  31. 我这里使用的办法:
  32. protected override void OnKeyDown(KeyEventArgs e)
  33. {
  34. base.OnKeyDown(e);
  35. if (e.Control && e.KeyCode == Keys.C && this.CurrentCell != null)
  36. {
  37. Clipboard.SetText(this.CurrentCell.Value.ToString());
  38. }
  39. }
  40. 8.如何根据工价表与物料清单构建出工艺清单
  41. PlanObject._ID = ZL_ID + PlanCode OR RqMtrl_ID + PlanCode
  42. ,PlanCode = 工序编码或 物料编码 + 工序号
  43. TreeObject._ID = RqMtrl_ID + partname OR RqMtrl_ID + procode
  44. SubTreeObject._ID = Tree_ID + rpcode OR PlanObject._ID
  45. RPGroupObject._ID = SubTree_ID + rpsubcode OR PlanObject._ID
  46. 工序ID = 主计划 + 子件 + 工序编码
  47. 工序进度ID = 指令单 + 工序编码
  48. 步骤ID = 主计划 + 子件 + 步骤名 OR NewID
  49. 后步骤ID = 主计划 + 子件 + 后步骤名 OR 主计划 + 上级子件 + 后步骤名 OR 同级子件按顺序后步骤 OR 上级子件开始步骤
  50. rpcode 为空的直接并行排
  51. rpsubcode 为空的单独成分组,不为空的串行成分组
  52. 概念:
  53. 步骤(TreeObject):定义部件的工艺步骤、前后关系、较大较粗的分步
  54. 子步骤(SubTreeObject):步骤下并行执行的子步骤,可能是一个流水线或者生产线
  55. ID = 步骤 + rpcode(替代工序组号) OR NewID
  56. 替代分组(RPGroupObject):在子步骤下互为替代的组合,组合下工序顺序按序号执行
  57. ID = 子步骤 + rpsubcode OR NewID
  58. 工序(PlanObject):具体工序
  59. ID = 主计划 + 子件 + 工序编码
  60. 9.如何可以方便地排产
  61. PlanObject:工序进度,包含了工序需要的人员或设备信息,单件用时信息,设定周期
  62. 给定PlanObject
  63. 问题列表:
  64. 1.未建完指令单的情况,派工数大于指令单数的情况 DONE
  65. 2.主计划添加计划类型,是否返工返修改类型 DONE
  66. 3.TreeObject/SubTreeObject/RpGroup中数量对应的是套数,PlanObject中proqty是工序数,workqty是一套的工序基数 DONE
  67. 4.PlanObject各自计算UsableEnd DONE
  68. 5.计算每行的cmplflag,[无条件派工、有条件派工、已完成]
  69. RqMtrlObject DONE
  70. PlanObject DONE
  71. MLObject
  72. ZLObject
  73. BuyTaskMx
  74. WfjgMx
  75. ScTask
  76. 6.PlanObject 派工只派未完成数
  77. 7.PlanObject,超期未完成的任务都派到今天
  78. 8.PlanObject, 没有占用产能也要占用时间,独立记录Begin/End
  79. 9.跟踪列表显示当前主计划号
  80. 10.跟踪列表显示层级
  81. 11.跟踪列表颜色区分[无条件派工、有条件派工、已完成]
  82. 12.工序显示所有班次的平均产能负荷
  83. 13.保存排程计划
  84. 14.重新加载排程计划
  85. 手稿2
  86. 改正产能负荷详细表,获取Tree.Wrkgrpid时的BUG
  87. UITree改成对应PlanObject,产能计算也按PlanObject的计算
  88. 1.推算
  89. // BUG: 结束时间在可结束时间之后
  90. 2.保存
  91. 看手稿1
  92. 3.重新加载