第1章 需求分析要略 1
1.1概述 1
1.2素材搜集 2
1.2.1素材搜集 3
1.2.2素材的局限性 5
1.2.3素材评价 5
1.3需求分析 6
1.3.1把握大局 7
1.3.2掌握规律 7
1.3.3体系构造 11
1.3.4需求分析样例 14
1.4需求方案撰写 16
1.4.1售前方案 16
1.4.2需求报告 16
1.4.3需求规格 18
1.5需求与项目风险 19
1.5.1来自用户的风险 19
1.5.2来自开发过程的风险 20
1.5.3需求分析与对象 21
1.5.4提升需求分析的能力 21
1.6总结 22
第2章 数据体系与规则 23
2.1概述 23
2.2命名规范 24
2.3表结构定义 25
2.3.1物理表命名 25
2.3.2字段命名 26
2.3.3总体约束 29
2.3.4命名小结 29
2.4物理表分类 30
2.4.1参数表 30
2.4.2词汇数据表 31
2.4.3基础数据表 31
2.4.4业务数据表 32
2.5物理表设计 33
2.5.1主键 33
2.5.2外键设置 35
2.5.3内键设置 39
2.6关于索引 40
2.6.1建立索引 40
2.6.2联合索引 40
2.6.3索引应用 41
2.7实现与版本 41
2.7.1设计实现 41
2.7.2数据版本 42
2.8代码命名规则 42
2.8.1规范的意义 43
2.8.2规范的目的性 44
2.8.3命名规则定义 44
2.8.4对象命名 45
2.8.5类与对象命名 46
2.8.6自定义类的主题字注册 47
2.8.7其他命名规则 48
2.9代码书写规范 50
2.10总结(规范的作用) 50
第3章 自定义按钮控件 51
3.1概述 51
3.1.1解决代码复用 52
3.1.2统一设计模式 52
3.1.3统一设计风格 53
3.1.4便于系统维护 53
3.1.5封装的粒度 54
3.2自定义类 54
3.2.1对象与封装 55
3.2.2类与继承 55
3.2.3类的属性 56
3.2.4接口 56
3.2.5自定义类 56
3.3接口应用 57
3.3.1接口实现 57
3.3.2接口的意义 58
3.3.3接口继承示例 58
3.3.4接口继承样例 59
3.3.5接口应用样例 59
3.4录入辅助按钮 60
3.4.1自定义“Button”到“BTN_”基础类 60
3.4.2自定义“BTN_展开”子类(辅助编辑) 64
3.4.3自定义“BTN_只读”子类(状态控制) 68
3.4.4自定义“BTN_浏览”子类(打开文件) 72
3.4.5自定义“BTN_上传”子类(转储文件) 78
3.4.6自定义“BTN_路径”子类(文件位置) 86
3.4.7自定义“BTN_图片”子类(图片管理) 88
3.4.8自定义“BTN_结构”子类(辅助编辑) 90
3.4.9 “BTN_”类封装小结 93
3.5工具栏按钮 94
3.5.1录入过程控制 94
3.5.2实现录入控制的途径 96
3.5.3自定义“ToolSttipButton”到“TSB_”类 97
3.5.4自定义“TSB_退出”子类(关闭窗体) 101
3.5.5自定义“TSB_增加”子类(数据级联) 102
3.5.6自定义“TSB_删除”子类(数据级联) 115
3.5.7自定义“TSB_复制”子类(记录复制) 119
3.5.8自定义“TSB_修改”子类(数据维护) 123
3.5.9自定义“TSB_保存”子类(数据存储) 125
3.5.10自定义“TSB_刷新”子类 127
3.5.11自定义“TSB_查询”子类(激发条件合成) 127
3.5.12 “TSB_”封装小结 128
3.6自定义“Label”到“LBL”类 128
3.6.1命题与构思 129
3.6.2代码实现 130
3.6.3应用示例 132
3.7总结(掌握封装的理念) 134
第4章 自定义数据控件 136
4.1概述 136
4.2自定义“Textbox”到“TB_”类 137
4.2.1命题提出 137
4.2.2代码实现 138
4.2.3自动绑定数据源 142
4.2.4自动生成助记码 143
4.2.5应用正则表达式 145
4.2.6自动生成条件子句 146
4.3由“TB_”封装的子类 149
4.3.1自定义“TB_定位访问”子类 149
4.3.2自定义“TB_定位插入”子类 159
4.3.3服务:FRM_重码选择 168
4.3.4自定义“TB_数值”子类 174
4.3.5自定义“TB_统计”子类 178
4.3.6自定义“TB_取值”子类 182
4.3.7由“TB_”封装的应用类 183
4.3.8小结 188
4.4自定义“Textbox”到“TB_票号”类 189
4.5自定义“ComboBox”到“CBX_”类 197
4.5.1命题提出 197
4.5.2设计构思 198
4.5.3代码实现 199
4.6自定义“CBX_”的子类 212
4.6.1封装子类的意义 212
4.6.2自定义“CBX_词汇”子类 213
4.6.3自定义“CBX_集合填写”子类 216
4.6.4自定义“CBX_物理表”子类 220
4.6.5自定义“CBX_表字段”子类 221
4.6.6自定义“CBX_Grid列”子类 224
4.6.7自定义“CBX_Grid数值列”子类 225
4.6.8自定义“CBX_颜色选择”子类 227
4.6.9小结 230
4.7自定义“Listbox”到“LB_”类 231
4.7.1代码实现 231
4.7.2自定义“LB_物理表”子类 232
4.7.3自定义“LB_表字段”子类 233
4.7.4自定义“LB_Grid列”子类 234
4.7.5自定义“LB_同比”子类 237
4.8服务:FRM_结构字符串 242
4.9自定义“DateTimePicker”到“DTP_”类 247
4.9.1命题与思路 248
4.9.2代码实现 250
4.9.3应用样例 254
4.10自定义“CheckBox”到“CKB_”类 256
4.10.1命题提出 257
4.10.2设计构思 257
4.10.3代码实现 258
4.10.4应用样例 261
4.11自定义“RadioButton”到“RB_”类 263
4.12总结(封装的成本价值) 265
第5章 自定义Grid控件 267
5.1概述 267
5.2自定义“DataGridView”到“GDV”类 268
5.2.1命题提出 269
5.2.2总体构思 270
5.2.3总体效果 272
5.3数据装载 282
5.3.1命题提出 282
5.3.2设计构思 283
5.3.3综合样例 293
5.4样式与规则 295
5.4.1命题提出 295
5.4.2构思与实现 296
5.4.3应用样例 311
5.4.4正则验证 313
5.5动态设置 316
5.5.1左侧锁定(随机定义锁定) 316
5.5.2主从联动(设置) 319
5.5.3主从联动(撤销) 321
5.5.4同步刷新(数据集联合动作) 323
5.5.5字段隐藏(设置可见与次序) 328
5.5.6卡片控制 334
5.5.7字段值统计(随机统计计算) 336
5.5.8增加选择列(全选与撤销) 340
5.5.9悬停提示(辅助提示) 341
5.6网格参数 342
5.6.1参数表(局部) 342
5.6.2窗体与代码 342
5.6.3数据集命名 345
5.6.4约束表达式(记录级验证) 347
5.6.5警示表达式(记录级警示) 351
5.6.6判重表达式(字段联合约束) 352
5.6.7强调色表达式(强调网格行) 355
5.7数据服务 357
5.7.1批量查找(逐个定位) 357
5.7.2联合排序(动态组合字段) 364
5.7.3动态过滤(动态条件设置) 367
5.7.4字段赋值(初始化辅助) 371
5.7.5批量替换(按特征值替换) 374
5.8总结(封装与服务) 379
第6章 数据对象服务 381
6.1概述 381
6.2格式化输出 382
6.2.1打印样式管理方案 382
6.2.2套用Excel样式 394
6.2.3自定义图形展示 399
6.3导入与导出 403
6.3.1导出(窗体数据到Excel等文件) 403
6.3.2导入(从Excel等文件导入数据) 412
6.3.3方案化导入导出(电子票据辅助处理) 419
6.3.4模式化的数据导出(财务接口辅助) 420
6.3.5 SQL直接导出(从查询导出Excel文件) 422
6.4相关性的遍历 426
6.4.1穷尽“谁与我相关”(对主键引用的遍历) 427
6.4.2穷尽“我与谁相关”(对引用外键的遍历) 431
6.5主键值替换(遍历式变更) 436
6.5.1命题提出 437
6.5.2解决思路 437
6.5.3窗体与实现 438
6.5.4应用样例 442
6.6主从键值设置(内键关系设置) 446
6.6.1命题提出 446
6.6.2设计与实现 446
6.6.3应用样例 449
6.7数据审计(日志自动化) 452
6.7.1问题提出 452
6.7.2解决思路 453
6.7.3审计历程 454
6.7.4审计查询 459
6.8数据体系初始化 461
6.8.1命题提出 461
6.8.2窗体与实现 461
6.8.3应用样例 463
6.9关于数据结构的文档 464
6.9.1基于代码方式的实现 466
6.9.2基于参数方式的实现 468
6.10数据备份与恢复 470
6.10.1实现方案 470
6.10.2代码实现 471
6.10.3应用样例 473
6.11 TSB_提交(按钮) 473
6.11.1命题提出 473
6.11.2设计构思 474
6.11.3代码实现 474
6.11.4应用样例 476
6.12业务计算器 476
6.13总结(功能抽象与实现) 478
第7章 设计模式与容器控件 480
7.1设计模式 480
7.1.1理解设计模式 480
7.1.2运用设计模式 481
7.1.3数据应用模式 481
7.1.4实现的应用模式 482
7.2数据衍生 483
7.2.1自定义“BTN_冲红”子类(对冲衍生) 483
7.2.2应用样例 486
7.2.3自定义“BTN_拆解”子类(拆解衍生) 489
7.3自定义“Panel”到“PNL_”类(数据绑定) 496
7.3.1问题提出 496
7.3.2解决思路 496
7.3.3代码实现 497
7.3.4应用样例 502
7.4填充模式(标注项填写) 502
7.4.1自定义“PNL_填充”子类 503
7.4.2解决思路 503
7.4.3代码实现 503
7.4.4自定义“BTN_填充”子类 504
7.4.5应用样例 506
7.5查询模式(动态条件) 508
7.5.1自定义“PNL查询”子类(动态条件) 508
7.5.2自定义“BTN_查询”子类(查询按钮) 511
7.5.3准动态条件(条件辅助) 513
7.5.4应用样例 516
7.6分组模式 522
7.6.1自定义“TreeView”到“TV_”类(随机字段) 523
7.6.2命题提出 523
7.6.3设计构思 523
7.6.4参数表 524
7.6.5代码实现 528
7.6.6服务:“分组属性设置” 533
7.6.7应用样例 534
7.6.8小结 540
7.7自定义“TreeView”到“TV_编码”类(结构化字段) 541
7.8总结(功能中的自动化) 546
第8章 Form封装与应用模式 548
8.1概述 548
8.1.1 Form封装 548
8.1.2应用模式 549
8.1.3自定义“FORM”到“FRM_”类 549
8.2如何实现“应用功能” 561
8.2.1数据采集 561
8.2.2卡片模式 561
8.2.3查询模式 565
8.2.4查询模式与数据处理模式的结合 570
8.2.5复杂应用模式 571
8.3生成器模式与生成器 572
8.3.1数据卡片“生成器” 572
8.3.2自定义“FRM_卡片”子类 574
8.3.3实现“字段?控件类”映射 577
8.3.4“生成器”实现 580
8.3.5“生成器”运用 590
8.3.6编辑“生成器”结果 595
8.3.7对生成结果的引用 599
8.3.8“应用类”生成器 600
8.3.9小结(生成代码的代码) 600
8.4“在线帮助”生成器 601
8.4.1帮助文档制作(常规方式) 601
8.4.2帮助文档调用(常规方式) 603
8.4.3命题提出 604
8.4.4设计思路 604
8.4.5关于HTML文件的粒度 606
8.4.6自定义“CLS_HTML转换CHM”类 606
8.4.7生成器窗体 615
8.4.8参数文件生成 618
8.4.9实现“在线帮助” 620
8.4.10“在线帮助”部署 620
8.4.11在线帮助样例(更新该样例) 621
8.4.12支持“在线撰写” 621
8.4.13在线撰写样例 622
8.4.14支持“在线编译” 623
8.4.15“在线编译”实现 624
8.4.16小结 627
8.5流程控制器 627
8.5.1总体构思 628
8.5.2问题提出 628
8.5.3流程定义数据 630
8.5.4流程目标数据 633
8.5.5流程历程数据 633
8.5.6节点上的策略 634
8.5.7自定义“PNL_审批”类 636
8.5.8流程管理的实现 641
8.5.9流程构造样例 643
8.5.10流程应用样例 646
8.5.11小结 651
8.6总结(设计时序与流程) 651
第9章 运行环境构建与部署 653
9.1概述 653
9.1.1总体流程 654
9.1.2原始形态 654
9.1.3初步设想 655
9.2实现步骤 656
9.2.1关于App.config文件 656
9.2.2自定义Main到“FRM_主窗口类” 657
9.2.3全局变量(静态预置) 664
9.3外部参数 665
9.3.1命题提出 665
9.3.2参数表与参数引用 666
9.3.3几个类似的参数表 667
9.3.4维护窗体 667
9.3.5应用样例 667
9.4身份认证 668
9.4.1通行字验证规则 668
9.4.2用户注册 671
9.4.3权限委托 679
9.5权限策略 685
9.5.1授权策略综述 685
9.5.2授权机制示意图 687
9.5.3“功能”授权 688
9.5.4“字段”授权 688
9.5.5“控件”授权 691
9.5.6“键字段”授权 694
9.5.7小结 695
9.6菜单管理 696
9.6.1命题与构思 696
9.6.2功能授权 704
9.6.3菜单维护窗体 704
9.6.4图形化菜单 707
9.6.5小结 717
9.7功能管理 717
9.7.1问题提出 717
9.7.2解决思路 718
9.7.3运行效果 723
9.8自定义ToolStripDropDownButton到“TSD_”类 724
9.8.1命题提出 724
9.8.2构思与实现 724
9.8.3应用效果 727
9.9辅助控件 728
9.9.1主窗体辅助 728
9.9.2一般窗体辅助 729
9.10动态属性 734
9.10.1自定义“PropertyGrid”到“FPG_”类 734
9.10.2命题提出 734
9.10.3设计构思 734
9.10.4代码实现 735
9.10.5窗体与代码 739
9.10.6应用样例 740
9.11风格管理 741
9.11.1命题提出 741
9.11.2设计构思 742
9.12总结(作用与评价) 747
9.13应用系统部署 748
9.13.1实现部署的工具 748
9.13.2部署策略的制定 749
9.13.3发布ClickOnce应用程序 749
9.13.4部署发布的样例 750
9.13.5部署发布过程中的常见问题 751
9.13.6 版本更新过程中的常见问题 753
第10章 工作平台构建 755
10.1概述 755
10.2平台构建 756
10.2.1确定目标 756
10.2.2转变观念 756
10.2.3制定规范 757
10.2.4分步实现 757
10.2.5示意图 761
10.3效果与评价 762
10.3.1改进需求分析 762
10.3.2强化数据体系 762
10.3.3代码与复用 762
10.3.4可靠性 763
10.3.5适应性 763
10.3.6改进项目管理 763
10.3.7合理支付成本 764
10.3.8规范实施过程 765
10.3.9提高综合效益 765
10.4形成技术积累 765
10.5持续与扩充 766
10.6总结 767
附录A 方法代码汇编 768
A.1概述 768
A.2方法库“CLS_公用方法” 769
A.2.1方法库的形成 769
A.2.2方法库框构 769
A.2.3方法库代码 770
A.3方法库“CLS_数据访问” 848
A.3.1数据访问库的形成 848
A.3.2数据访问库的框构 848
A.3.3数据访问库的代码 849
A.4公用变量 862
A.5公用接口 865
A.6总结(函数与方法) 866
编后语 867