1.列表中如何添加合计行 OLV(ObjectListView)相关讨论 https://sourceforge.net/p/objectlistview/discussion/825500/thread/e413cafd/ 这里提到wxGrid、wxWindows,可以研究下 https://sourceforge.net/p/objectlistview/discussion/812923/thread/f89adc7c/?limit=25#e197 https://sourceforge.net/p/objectlistview/discussion/812922/thread/7f2bc2f4/ 这里提供了示例,使用AboutToCreateGroups事件计算小计 DataGridView相关讨论 http://stackoverflow.com/questions/5591252/totals-row-in-a-datagridview 1.在CellPainting事件计算小计并调整TextBox位置 2.文中引用很好地解决了这个问题(http://www.codeproject.com/Articles/51889/Summary-DataGridView) OLV应该可以很好的参考这个方法 这里控件可以很好的解决了汇总的问题,但引入了新的问题: 1.修改列宽或位置会跳转到每一列 2.用键盘跳转时,汇总列不会跟随 上面两个问题都可以通过处理DGV的Scroll事件,过滤掉因列头操作引起的事件。详细可看LJDataGridView中的代码 2.DataGridView在拖拽列时需要点一下获取焦点再拖才可以,拖的过程中不能使用左/右键进行滚动 查看源代码发现DataGridView的dataGridViewState1[DATAGRIDVIEWSTATE1_scrolledSinceMouseDown]在操作滚动条后为true导致不能跳转到拖放列模式 关键代码看DataGridView.OnCellMouseMove 3.导出Excel,这里使用NPOI,详细使用方法上网查 4.DataGridView在CellValueChanged事件中修改数据源的值不会马上刷新到界面 对于CheckBox CellValueChanged事件并不会马上触发 应该在CurrentCellDirtyStateChanged事件调用DataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit)接受修改,则会马上触发CellValueChanged事件 在CellValueChanged事件中如果修改了数据源的值,需要调用DataGridView.Refresh() 重绘界面 5.界面使用锚Anchor时经常出现水平滚动条被挡住的问题 未有深入研究,但改用Dock就可以解决 6.DataGridView在创造函数中修改列的Visible有时会无效,值是改了,但实际显示状态不正确 未有深入研究,但只在初始化时将动态显示的列设成不可视,修改列的Visible前调用BeginInit,修改完后调用EndInit就不会出现这现象 7.DataGridView如何可以复制单个单元格的内容 这里说得比较靠谱,但未实践过:http://www.wjxfpf.com/2015/10/643339.html 我这里使用的办法: protected override void OnKeyDown(KeyEventArgs e) { base.OnKeyDown(e); if (e.Control && e.KeyCode == Keys.C && this.CurrentCell != null) { Clipboard.SetText(this.CurrentCell.Value.ToString()); } } 8.如何根据工价表与物料清单构建出工艺清单 工序ID = 主计划 + 子件 + 工序编码 步骤ID = 主计划 + 子件 + 步骤名 OR NewID 后步骤ID = 主计划 + 子件 + 后步骤名 OR 主计划 + 上级子件 + 后步骤名 OR 同级子件按顺序后步骤 OR 上级子件开始步骤 rpcode 为空的直接并行排 rpsubcode 为空的单独成分组,不为空的串行成分组 概念: 步骤(TreeObject):定义部件的工艺步骤、前后关系、较大较粗的分步 子步骤(SubTreeObject):步骤下并行执行的子步骤,可能是一个流水线或者生产线 ID = 步骤 + rpcode(替代工序组号) OR NewID 替代分组(RPGroupObject):在子步骤下互为替代的组合,组合下工序顺序按序号执行 ID = 子步骤 + rpsubcode OR NewID 工序(PlanObject):具体工序 ID = 主计划 + 子件 + 工序编码 9.如何可以方便地排产 1.