這是一個Winform 呼叫 webapi進行基本查詢、維護的範例。
- 畫面圖示
- 程式架構
- WebApiHelper - 介於winform與webapi間的溝通橋樑,winform呼叫helper的服務後,再由helper執行真正對應的WebApi內容並加以整合business rule後回傳給winform需要的資料型態與內容。
- WebApiTest - WebApi,此範例主要僅用來處理CRUD
- WindowsFormApp1 - Winform畫面
- 以Query查詢程式為例
- Winform的btnQuery_Click
private void btnQuery_Click(object sender, EventArgs e)
{
var equalSearch = new LocalCuisine { DISTRICT = string.IsNullOrEmpty(cboDistrict.Text) == false ? cboDistrict.Text : null };
var fuzzySearch = new LocalCuisine
{
NAME = string.IsNullOrEmpty(txtName.Text) == false ? txtName.Text : null,
ADDRESS = string.IsNullOrEmpty(txtAddress.Text) == false ? txtAddress.Text : null
};
List<LocalCuisine> datas = actionHelper.Query(equalSearch, fuzzySearch);
dgvResult.Rows.Clear();
foreach (var data in datas)
{
dgvResult.Rows.Add(data.ID, data.ITEM, data.NAME, data.DISTRICT, data.PHONE, data.ADDRESS);
}
}
- Helper的Query()
public List<LocalCuisine> Query(LocalCuisine equalSearch, LocalCuisine fuzzySearch)
{
//WebApi query的寫法是equal判斷, 故除了District這種正規化欄位可equal search外, 其餘Name與Address這兩個模糊搜尋的欄位另外以lambda過濾
ExecuteResult getAllData = CommonUtil.CallService(equalSearch, "action", "query");
List<LocalCuisine> jObjs = new List<LocalCuisine>();
foreach (var d in getAllData.Data)
{
JObject jObj = d as JObject;
jObjs.Add(jObj.ToObject<LocalCuisine>());
}
if (string.IsNullOrEmpty(fuzzySearch.NAME) == false)
{
jObjs = jObjs.FindAll(x => x.NAME.IndexOf(fuzzySearch.NAME) > -1);
}
if (string.IsNullOrEmpty(fuzzySearch.ADDRESS) == false)
{
jObjs = jObjs.FindAll(x => x.ADDRESS.IndexOf(fuzzySearch.ADDRESS) > -1);
}
return jObjs;
}
- WebApi
[HttpPost]
[Route("query")]
public ExecuteResult QueryData([FromBody] JObject postData)
{
ExecuteResult executeResult = new ExecuteResult();
try
{
LocalCuisine criteria = postData.ToObject<LocalCuisine>();
//引用AppLibrary.dll中的Repository pattern, 抓取sqlite db
Repository<LocalCuisine> rep = new Repository<LocalCuisine>(CommonUtil.getConfig("DBName"));
executeResult.Data = rep.Select(criteria);
executeResult.IsSuccess = true;
}
catch (Exception e)
{
executeResult.Msg = e.Message;
executeResult.IsSuccess = false;
}
return executeResult;
}
- Winform操作功能簡介
Import
- 可選擇 WebApiHelper\Models\Taichung_LocalCuisine_formatter.json file後進行import, 程式會將json內容寫入sqlite資料庫(產生路徑:WebApiTest\testdb.sqlite)
- 程式先Delete all data後再進行batch insert
Query
- 依查詢條件回傳符合結果
- 用於撈出 "District" dropdownlist內容及 "Query" button的查詢結果
Update
- 除Item欄位外,其餘Cell click兩下可修改該欄位值, 按下 "Update" button後進行batch update
Export
- 可選擇匯出json or excel file
- 依gridview內容進行匯出