日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Winform界面中主从表编辑界面的快速处理

發布時間:2025/4/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Winform界面中主从表编辑界面的快速处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Winform開發中,我們往往除了常規的單表信息錄入外,有時候設計到多個主從表的數據顯示、編輯等界面,單表的信息一般就是控件和對象實體一一對應,然后調用API保存即可,主從表就需要另外特殊處理,本隨筆介紹如何快速實現主從表編輯界面的處理,結合GridControl控件的GridView控件對象,實現數據在列表中的實時編輯,非常方便。

1、主從表的界面設計及展示

主從表一般涉及兩個以上的表,一個是主表,其他的是從表的,在實際情況下,一般包含兩個表較多,我們這里以兩個表的主從表關系進行分析處理。

例如我們建立兩個報銷申請單表關系如下所示。

對于報銷的主從表信息,我們可以在列表中進行展示,如下界面所示,分為兩部分:一部分是主表信息,一部分是從表信息,單擊主表信息后,顯示對應從表的列表信息。

那么我們新增一條主表記錄的時候,那么可以彈出一個新的界面進行數據的維護處理,方便我們錄入主從表的信息,界面如下所示。

上面界面包括了主表信息,以及從表的信息(在GridView中實時錄入)兩部分,這樣填寫后統一進行提交處理。

?2、主從表編輯界面的處理

這里主要介紹一下主從表的編輯界面處理,也就是上面這個界面的實現處理。

其中初始化GridView的代碼如下所示。

/// <summary> /// 初始化明細表的GridView數據顯示/// </summary>private void InitDetailGrid(){//初始清空列this.gridView1.Columns.Clear();//設置部分列隱藏this.gridView1.CreateColumn("ID", "編號").Visible = false;this.gridView1.CreateColumn("Header_ID", "主表編號").Visible = false;this.gridView1.CreateColumn("Apply_ID", "申請單編號").Visible = false;//添加下拉列表列,并綁定數據源this.gridView1.CreateColumn("FeeType", "費用類型", 100).CreateComboBox().BindDictItems("費用類型");//創建日期列并指定格式var OccurTime = this.gridView1.CreateColumn("OccurTime", "發生時間", 120).CreateDateEdit();OccurTime.EditMask = "yyyy-MM-dd HH:mm";OccurTime.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm";//創建數值列this.gridView1.CreateColumn("FeeAmount", "費用金額").CreateSpinEdit();//創建備注列this.gridView1.CreateColumn("FeeDescription", "費用說明", 200).CreateMemoEdit();//初始化GridView,可以新增列this.gridView1.InitGridView(GridType.NewItem, false, EditorShowMode.MouseDownFocused, "");//轉義列內容顯示this.gridView1.CustomColumnDisplayText += new CustomColumnDisplayTextEventHandler(gridView1_CustomColumnDisplayText);//處理單元格的樣式this.gridView1.RowCellStyle += new RowCellStyleEventHandler(gridView1_RowCellStyle);//不允許頭部排序this.gridView1.OptionsCustomization.AllowSort = false;//繪制序號this.gridView1.CustomDrawRowIndicator += (s, e) =>{if (e.Info.IsRowIndicator && e.RowHandle >= 0){e.Info.DisplayText = (e.RowHandle + 1).ToString();}};//對輸入單元格進行非空校驗this.gridView1.ValidateRow += delegate(object sender, ValidateRowEventArgs e){var result = gridControl1.ValidateRowNull(e, new string[]{"FeeType"});};//新增行的內容初始化this.gridView1.InitNewRow += (s, e) =>{gridView1.SetRowCellValue(e.RowHandle, "ID", Guid.NewGuid().ToString());gridView1.SetRowCellValue(e.RowHandle, "Header_ID", tempInfo.ID);gridView1.SetRowCellValue(e.RowHandle, "Apply_ID", tempInfo.Apply_ID);gridView1.SetRowCellValue(e.RowHandle, "OccurTime", DateTime.Now);};}void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e){GridView gridView = this.gridView1;if (e.Column.FieldName == "FeeAmount"){e.Appearance.BackColor = Color.Green;e.Appearance.BackColor2 = Color.LightCyan;}}void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e){string columnName = e.Column.FieldName;if (e.Column.ColumnType == typeof(DateTime)){if (e.Value != null){if (e.Value == DBNull.Value || Convert.ToDateTime(e.Value) <= Convert.ToDateTime("1900-1-1")){e.DisplayText = "";}else{e.DisplayText = Convert.ToDateTime(e.Value).ToString("yyyy-MM-dd HH:mm");//yyyy-MM-dd }}}}

上面代碼都有詳細的備注,主要就是我們根據數據庫表的關系,創建對應顯示的字段即可,其中有需要隱藏的那么就不要顯示(方便獲取對應的值)

//設置部分列隱藏this.gridView1.CreateColumn("ID", "編號").Visible = false;this.gridView1.CreateColumn("Header_ID", "主表編號").Visible = false;this.gridView1.CreateColumn("Apply_ID", "申請單編號").Visible = false;

如果需要綁定下拉列表類似的字段,那么創建對應的數據類型,然后調用綁定函數綁定即可,如下面代碼

//添加下拉列表列,并綁定數據源this.gridView1.CreateColumn("FeeType", "費用類型", 100).CreateComboBox().BindDictItems("費用類型");

如果是一些特殊的輸入需要設置格式顯示或者掩碼,那么如下所示

//創建日期列并指定格式var OccurTime = this.gridView1.CreateColumn("OccurTime", "發生時間", 120).CreateDateEdit();OccurTime.EditMask = "yyyy-MM-dd HH:mm";OccurTime.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm";

另外有一個值得注意的就是我們新增一行從表記錄的時候,需要記錄一些主表的屬性,這樣的話,我們就是在行初始化的時候,賦值給從表的隱藏列即可。

//新增行的內容初始化 this.gridView1.InitNewRow += (s, e) =>{gridView1.SetRowCellValue(e.RowHandle, "ID", Guid.NewGuid().ToString());gridView1.SetRowCellValue(e.RowHandle, "Header_ID", tempInfo.ID);gridView1.SetRowCellValue(e.RowHandle, "Apply_ID", tempInfo.Apply_ID);gridView1.SetRowCellValue(e.RowHandle, "OccurTime", DateTime.Now);}; 在界面中如果我們需要顯示主表的信息,那么就根據條件獲取對應的主表記錄對象,然后顯示給界面控件即可。 /// <summary>/// 顯示常規的對象內容/// </summary>/// <param name="info"></param>private void DisplayInfo(ReimbursementInfo info){tempInfo = info;//重新給臨時對象賦值,使之指向存在的記錄對象 txtCategory.Text = info.Category;txtReason.Text = info.Reason;txtTotalAmount.Value = info.TotalAmount;txtNote.Text = info.Note;}

而保存的時候,我們把界面內容重新賦值給對應的主表對象。

/// <summary>/// 編輯或者保存狀態下取值函數/// </summary>/// <param name="info"></param>private void SetInfo(ReimbursementInfo info){info.Category = txtCategory.Text;info.Reason = txtReason.Text;info.TotalAmount = txtTotalAmount.Value;info.Note = txtNote.Text;info.ApplyDate = DateTime.Now;info.ApplyDept = base.LoginUserInfo.DeptId;info.CurrentLoginUserId = base.LoginUserInfo.ID;}

而我們需要獲取GridView明細輸入的時候,就通過一個函數遍歷獲取GridView的行記錄,轉換為相應的對象即可,如下所示。

/// <summary>/// 獲取明細列表/// </summary>/// <returns></returns>private List<ReimbursementDetailInfo> GetDetailList(){var list = new List<ReimbursementDetailInfo>();for (int i = 0; i < this.gridView1.RowCount; i++){var detailInfo = gridView1.GetRow(i) as ReimbursementDetailInfo;if (detailInfo != null){list.Add(detailInfo);}}return list;}

這樣處理完這些信息后,我們就可以在主表保存的時候,同時保存明細表信息即可。

/// <summary>/// 新增狀態下的數據保存/// </summary>/// <returns></returns>public override bool SaveAddNew(){ReimbursementInfo info = tempInfo;//必須使用存在的局部變量,因為部分信息可能被附件使用 SetInfo(info);info.Creator = base.LoginUserInfo.ID;info.CreateTime = DateTime.Now;try{#region 新增數據bool succeed = BLLFactory<Reimbursement>.Instance.Insert(info);if (succeed){//可添加其他關聯操作var list = GetDetailList();foreach(var detailInfo in list){BLLFactory<ReimbursementDetail>.Instance.InsertUpdate(detailInfo, detailInfo.ID);}return true;}#endregion}catch (Exception ex){LogTextHelper.Error(ex);MessageDxUtil.ShowError(ex.Message);}return false;}

其中代碼

BLLFactory<ReimbursementDetail>.Instance.InsertUpdate(detailInfo, detailInfo.ID);

可以對新增記錄保存,也可以對存在的記錄進行更新。

通過上面的介紹,我們可以看到不同的主從表其實邏輯還是很通用的,我們可以把它們的邏輯抽取出來,通過代碼生成工具進行快速生成即可。

本文轉自博客園伍華聰的博客,原文鏈接:Winform界面中主從表編輯界面的快速處理,如需轉載請自行聯系原博主。

總結

以上是生活随笔為你收集整理的Winform界面中主从表编辑界面的快速处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精选一区二区三区 | 色啦啦视频 | 亚洲国产精品无码专区 | 国语对白91| 青青操网 | 国产又粗又黄又爽的视频 | 日本r级电影在线观看 | 夜夜操夜夜爽 | 欧美a图| 91婷婷 | 蜜桃av网站| 青青草视频国产 | 伊人手机在线视频 | 97自拍视频在线 | 成人无高清96免费 | 国产大片一区二区 | 黄色一级大片在线免费看国产一 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 德国艳星videos极品hd | 台湾佬美性中文 | 深夜福利网址 | av免费国产 | 久久无码人妻精品一区二区三区 | 国产精品久久久久久久av | 国产视频在线观看网站 | 亚洲黄色影院 | 天天看夜夜 | 国产一区二区三区在线免费观看 | 色综合九九 | 欧美色炮 | 2022精品国偷自产免费观看 | 成人精品三级av在线看 | 日本色婷婷 | 一区二区三区在线观看 | 亚洲在线免费 | 图片区亚洲色图 | www.黄色大片 | 国产春色| 好爽又高潮了毛片 | 真实偷拍激情啪啪对白 | 国产精品一二区在线观看 | 欧美日韩欧美日韩在线观看视频 | 国产毛片毛片毛片毛片毛片毛片 | www.chengren | 欧美极品一区二区三区 | 亚洲精品福利 | 国产suv精品一区二区60 | 成人欧美视频在线观看 | 亚洲成人网av | 日韩久久久精品 | 2021天天操 | 三上悠亚亚洲一区 | 色月婷婷 | 特及毛片 | 91叉叉叉 | 日本色区| 国产乱淫av麻豆国产免费 | 夜夜免费视频 | 在线看一区二区 | 欧美黄色高清视频 | 在线精品视频一区 | 岛国精品在线播放 | 亚洲第3页| 久久一区欧美 | 久久艹艹 | 一级bbbbbbbbb毛片 | 一级免费黄色大片 | 五月婷婷激情小说 | 91av影视| 国产一区二区亚洲 | 日本男人天堂 | 国产艳俗歌舞表演hd | 特黄特色免费视频 | 9色在线视频 | 91你懂的| 国产香蕉97碰碰碰视频在线观看 | 国产性猛交96 | 伊人免费视频 | 久久免费精品国产 | 茄子爱啪啪 | 久草视频免费在线播放 | 可以在线看的av | 欧美日韩三级在线观看 | 国产一区免费在线观看 | 日韩三级a| 一区二区免费在线观看视频 | 中国女人裸体乱淫 | 国产伦理久久精品久久久久 | 日韩精品一区二区三区 | 久草手机在线视频 | 亚洲丝袜一区 | 亚洲成人无码久久 | 国产69精品久久久 | 亚洲精品一区三区三区在线观看 | 一本色道久久综合狠狠躁 | 亚洲理论中文字幕 | 91激情在线观看 | 精品天堂 | 色婷婷久久综合中文久久蜜桃av |