Gs.DevApp 快速上手手册
目录速览
DevFrm/:各业务模块的 WinForms 窗体,例如 BasicData/Frm_MesWorkshopLine.cs、QC/Frm_FqcDetect01.cs。所有查询与 CRUD 入口都在这些窗体里。
ToolBox/UtilityHelper.cs:通用方法库,包含 HTTP 调用、表格翻页、控件启用控制等。
ToolBox/MsgHelper.cs:统一的消息提示封装。
Entity/:接口交互模型,例如 PageQueryModel、ReturnModel<T>,用于分页/返回值解析。
UserControl/UcToolBarMenu.cs:工具条控件,定义了 btnAddClick、btnSaveClick 等固定事件。
查询固定入口:getPageList
- 触发链路:
pageBar1.PagerEvent、toolBarMenu1.btnLoadClick、toolBarMenu1.btnQueryClick 最终都会调用 getPageList(int curPage)(参见 DevFrm\BasicData\Frm_Customer.cs:36)。
- 方法必做三件事:
- 构造
PageQueryModel 并序列化:new PageQueryModel(curPage, pageBar1.RowsCount, sortName, "asc", "", UtilityHelper.GetSearchWhere(_filterList))。
- 调用接口:
UtilityHelper.HttpPost("", _webServiceName + "GetListPage", json)。
- 解析并绑定:
UtilityHelper.ReturnToTablePage(strReturn) → 绑定到 gcMain1,同步 pageBar1.TotalPages/RecordCount。
- 如果要改查询条件,查
_filterList 的构建流程(UtilityHelper.GetDilter + ShowFilter 自定义筛选)。
明细加载:getModel
- 切换到明细页或执行编辑时,
UtilityHelper.SetTabParameter 会拉起 getModel(string guid)。
- 该方法调用
_webServiceName + "GetModel",通过 UtilityHelper.SetValueByObj(layoutMx1.Controls, data, isEdit) 给控件回填;当 toolBarMenu1.currentAction == "edit" 时允许编辑。
- 若看到“明细不刷新”,先确认
lbGuid 是否赋值、toolBarMenu1.currentAction 是否被重置。
新增/编辑/保存
- 入口统一绑定在窗体构造函数中:
btnAddClick:UtilityHelper.CleanValueByControl(layoutMx1.Controls, true) 清空控件,JumpTab(xtraTabControl1, 4) 切到编辑页。
btnEdtClick:UtilityHelper.GetCurrentRow(...) 读取当前行,ChangeEnableByControl(..., true) 开启编辑。
btnSaveClick:组装匿名对象(通常含 Guid = UtilityHelper.ToGuid(lbGuid.Text)),然后 UtilityHelper.HttpPost("", _webServiceName + "EditModel", json)。成功后清除 currentAction、ChangeEnableByControl(..., false) 并提示。
- 常见校验与按钮状态均写在
ToolBarMenu1_btnSaveClick 内,直接在对应窗体里调整。
删除与刷新
- 删除固定在
toolBarMenu1.btnDelClick(如 DevFrm\BasicData\Frm_MesWorkshopLine.cs:200):
- 通过
UtilityHelper.GetCurrentRow 拿 Guid → MsgHelper.AskQuestion 二次确认 → 调用 _webServiceName + "DeleteModel"。
- 成功后通常
getPageList(pageBar1.CurrentPage) 重新拉取列表。
- 刷新按钮
btnLoadClick 默认判断当前页签:在明细页执行 getModel(lbGuid.Text),否则回到 getPageList。
常用工具方法速查
UtilityHelper.HttpPost:统一的接口请求,自动取 App.config 中的 WebApiUrl,调试时可先打印 _webServiceName 确认 URL。
UtilityHelper.ReturnToTablePage / ReturnToDynamic:把接口 JSON 转为 ReturnModel<T>;当列表渲染异常时首选检查 rtnCode 与 rtnMsg。
UtilityHelper.GetSearchWhere:把 FilterEntity 拼成 SQL 片段,位于 ToolBox/UtilityHelper.cs 1679 行附近。
UtilityHelper.JumpTab / SetGridViewParameter / SetTabParameter:负责列表与明细页的联动;若翻页或双击行为失效,先看这些设置是否被调用。
UtilityHelper.ChangeEnableByControl、SetValueByObj、CleanValueByControl:表单控件批量赋值/禁用的首选 API。
ToolBox.MsgHelper:挟带统一样式的提示窗,避免直接使用 MessageBox.Show。
调试小贴士
- 不知道某功能在哪个窗体?使用
rg "MesXxxManager" 或 rg "btnSaveClick" 快速定位。
- 所有查询都命名为
getPageList(小写 g),所以 rg "getPageList" 能一次看清所有窗体的分页实现。
_webServiceName 字段指向后端控制器前缀(如 "MesWorkshopLineManager/"),定位接口时只需组合 GetListPage、GetModel、EditModel、DeleteModel。
- 工具条所有按钮事件的原始定义在
UserControl/UcToolBarMenu.cs;如果需要新增按钮或排查禁用逻辑,可以从这里下手。