# Gs.DevApp 快速上手手册 ## 目录速览 - `DevFrm/`:各业务模块的 WinForms 窗体,例如 `BasicData/Frm_MesWorkshopLine.cs`、`QC/Frm_FqcDetect01.cs`。所有查询与 CRUD 入口都在这些窗体里。 - `ToolBox/UtilityHelper.cs`:通用方法库,包含 HTTP 调用、表格翻页、控件启用控制等。 - `ToolBox/MsgHelper.cs`:统一的消息提示封装。 - `Entity/`:接口交互模型,例如 `PageQueryModel`、`ReturnModel`,用于分页/返回值解析。 - `UserControl/UcToolBarMenu.cs`:工具条控件,定义了 `btnAddClick`、`btnSaveClick` 等固定事件。 ## 查询固定入口:getPageList 1. 触发链路:`pageBar1.PagerEvent`、`toolBarMenu1.btnLoadClick`、`toolBarMenu1.btnQueryClick` 最终都会调用 `getPageList(int curPage)`(参见 `DevFrm\BasicData\Frm_Customer.cs:36`)。 2. 方法必做三件事: - 构造 `PageQueryModel` 并序列化:`new PageQueryModel(curPage, pageBar1.RowsCount, sortName, "asc", "", UtilityHelper.GetSearchWhere(_filterList))`。 - 调用接口:`UtilityHelper.HttpPost("", _webServiceName + "GetListPage", json)`。 - 解析并绑定:`UtilityHelper.ReturnToTablePage(strReturn)` → 绑定到 `gcMain1`,同步 `pageBar1.TotalPages/RecordCount`。 3. 如果要改查询条件,查 `_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`;当列表渲染异常时首选检查 `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`;如果需要新增按钮或排查禁用逻辑,可以从这里下手。