Winform中实现新增和更新共用一个页面的示例流程
場景
Winform中對某個表的數據查詢出來,數據放在DataTable中,并將其顯示在DataGrdiView中。
點擊新增和編輯時打開的是同一個頁面。
打開頁面加載所有數據并顯示
?
點擊新增
?
點擊編輯
?
注:
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
實現
查詢實現
首先在Winform主頁面的頁面加載事件中,通過工具類中的查詢方法查詢數據并返回DataTable,然后通過id獲取DataGridView,然后設置DataGridView每列的顯示名稱以及每列與DataTable所對應的屬性名。然后綁定數據源。
??????????? //查詢所有數據DataTable table = KillSetHelper.SelectAllKillSet();//獲取DataGridViewDataGridView killLogGridView = this.GetControlById("KillSetGridView") as DataGridView;killLogGridView.Columns.Clear();DataGridViewTextBoxColumn acCode = new DataGridViewTextBoxColumn();acCode.DataPropertyName = "HomeNo";acCode.HeaderText = "房間號";killLogGridView.Columns.Add(acCode);DataGridViewTextBoxColumn acCode2 = new DataGridViewTextBoxColumn();acCode2.DataPropertyName = "KillWay";acCode2.HeaderText = "消殺方式";killLogGridView.Columns.Add(acCode2);DataGridViewTextBoxColumn acCode3 = new DataGridViewTextBoxColumn();acCode3.DataPropertyName = "Components";acCode3.HeaderText = "消殺部件";acCode3.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;killLogGridView.Columns.Add(acCode3);DataGridViewTextBoxColumn acCode4 = new DataGridViewTextBoxColumn();acCode4.DataPropertyName = "KillSeconds";acCode4.HeaderText = "定點消殺秒數";killLogGridView.Columns.Add(acCode4);killLogGridView.DataSource = table;killLogGridView.AutoGenerateColumns = false;新增實現
新建一個新增頁面,修改其布局,添加與數據庫字段對應的要添加的屬性。
?
然后打開此新增頁面的代碼,
首先定義一個private的枚舉類型字段
private ActionType _actionType = ActionType.Add;??? //操作類別,默認為添加此枚舉類型定義為
??? public enum ActionType{/// <summary>/// 添加/// </summary>Add = 0,/// <summary>/// 修改/// </summary>Modify = 1}然后再新增一個帶參數的構造方法,參數為上面的ActionType,在構造方法中將參數賦值給上面的字段。
還要保留原有的不帶參數的構造方法
??????? public FrmAddKillSet(){InitializeComponent();}public FrmAddKillSet(ActionType actionType){InitializeComponent();this._actionType = actionType;}這樣在新建新增頁面時就能指定當前操作類型是新增還是更新
FrmAddKillSet frmInsert = new FrmAddKillSet(ActionType.Add);還要定義一個public的類型為一個自定義Model的屬性用來傳遞要新增和更新的一些屬性。
比如這里要添加的和更新的屬性有如下
??? public class KillSetModel{/// <summary>/// 房間號/// </summary>private string homeNo;/// <summary>/// 消殺方式/// </summary>private int killWay;/// <summary>/// 定點消殺秒數/// </summary>private int killSeconds;/// <summary>/// 消殺部件/// </summary>private List<int> components;/// <summary>/// 房間號/// </summary>public string HomeNo{get { return homeNo; }set { homeNo = value; }}/// <summary>/// 消殺方式/// </summary>public int KillWay{get { return killWay; }set { killWay = value; }}/// <summary>/// 定點消殺秒數/// </summary>public int KillSeconds{get { return killSeconds; }set { killSeconds = value; }}/// <summary>/// 消殺部件/// </summary>public List<int> Components{get { return components; }set { components = value; }}}所以這里定義的屬性為
??????? public KillSetModel KillSetModel{get{}set{}}然后在KillSetModel中的get方法中獲取頁面上各個控件的值并將其賦值給KillSetModel的各個屬性
??????????? get{KillSetModel killSetModel = new KillSetModel();killSetModel.HomeNo = this.homeNo.Text;if(this.moveKill.Checked){killSetModel.KillWay = Global.KILL_WAY_MOVE_KILL;}if (this.fixKill.Checked){killSetModel.KillWay = Global.KILL_WAY_FIX_KILL;int killSeconds;int.TryParse(this.killSeconds.Text,out killSeconds);killSetModel.KillSeconds = killSeconds;}List<int> components = new List<int>();if(this.CB_1.Checked){components.Add((int)KillComponents.ShangWuHua);???????????????}if (this.CB_2.Checked){components.Add((int)KillComponents.XiaWuHua);}if (this.CB_3.Checked){components.Add((int)KillComponents.ShangZiWai);}if (this.CB_4.Checked){components.Add((int)KillComponents.XiaZiWai);}if (this.CB_5.Checked){components.Add((int)KillComponents.ShengJiangZhu);}if (this.CB_6.Checked){components.Add((int)KillComponents.KongQiJingHua);}killSetModel.Components = components;return killSetModel;}這樣就可以在新增頁面返回OK后獲取到新增時的值
FrmAddKillSet frmInsert = new FrmAddKillSet(ActionType.Add); string homeNo = frmInsert.KillSetModel.HomeNo;然后在新增按鈕的點擊事件中,直接返回DialogResult為OK就行了
this.DialogResult = System.Windows.Forms.DialogResult.OK;在上面新增按鈕的點擊事件中
??????????? //傳遞當前操作類型為新增FrmAddKillSet frmInsert = new FrmAddKillSet(ActionType.Add);//窗口顯示在屏幕中間frmInsert.StartPosition = FormStartPosition.CenterScreen;//顯示窗口DialogResult result = frmInsert.ShowDialog();//如果窗口返回OKif (result == DialogResult.OK){string strSql = "";string homeNo = frmInsert.KillSetModel.HomeNo;int killWay = frmInsert.KillSetModel.KillWay;int killSeconds = frmInsert.KillSetModel.KillSeconds;List<int> components = frmInsert.KillSetModel.Components;//執行插入數據庫的操作}編輯實現
在頁面編輯按鈕的點擊事件中,在上面已經對新增實現的基礎上
要根據選中行的第一個屬性查詢出所有的屬性然后傳遞到新增頁面的KillSetModel中,
在此KillSetModel的set方法中對新增頁面的各個控件進行賦值,然后再點擊更新按鈕后將
返回頁面結果為OK此時再通過KillSetModel屬性的get方法對應的操作獲取控件的值并傳遞到更新按鈕的點擊
事件中,然后獲取各個屬性并執行更新數據的操作。
首先在共用的新增頁面的屬性KillSetModel的set方法中
??????????? set{this._killSetModel = value;//房間號賦值this.homeNo.Text = this._killSetModel.HomeNo;this.homeNo.Enabled = false;this.BT_ADD.Text = "更新";//if (this._killSetModel.KillWay == Global.KILL_WAY_MOVE_KILL){this.moveKill.Checked = true;}if (this._killSetModel.KillWay == Global.KILL_WAY_FIX_KILL){this.fixKill.Checked = true;this.killSeconds.Text = this._killSetModel.KillSeconds.ToString();}//foreach (int index in this._killSetModel.Components){switch (index){case (int)KillComponents.ShangWuHua :this.CB_1.Checked = true;break;case (int)KillComponents.XiaWuHua:this.CB_2.Checked = true;break;case (int)KillComponents.ShangZiWai:this.CB_3.Checked = true;break;case (int)KillComponents.XiaZiWai:this.CB_4.Checked = true;break;case (int)KillComponents.ShengJiangZhu:this.CB_5.Checked = true;break;case (int)KillComponents.KongQiJingHua:this.CB_6.Checked = true;break;}}}然后在更改后點擊更新后直接返回DialogResult為OK
this.DialogResult = System.Windows.Forms.DialogResult.OK;然后在前面更新按鈕的點擊事件中
??????????? DataGridView killSetGridView = this.GetControlById("KillSetGridView") as DataGridView;if (killSetGridView.SelectedRows.Count == 0){MessageBox.Show("請選中一條數據!");return;}DataGridViewRow row = killSetGridView.SelectedRows[0];string homeNo = row.Cells[0].Value.ToString();KillSetModel model = new KillSetModel();if (!string.IsNullOrEmpty(homeNo)){//查詢出對應的ModelDataTable table = KillSetHelper.SelectKillSetByHomeNo(homeNo);model.HomeNo = table.Rows[0][0].ToString();model.KillWay = int.Parse(table.Rows[0][1].ToString());if (model.KillWay == Global.KILL_WAY_FIX_KILL){model.KillSeconds = int.Parse(table.Rows[0][3].ToString());}string[] arrayComponents = table.Rows[0][2].ToString().Split(',');List<int> listComponents = new List<int>();foreach(string a in arrayComponents){listComponents.Add(int.Parse(a));}model.Components = listComponents;}//更新FrmAddKillSet frmInsert = new FrmAddKillSet(ActionType.Modify);//傳遞參數frmInsert.KillSetModel = model;frmInsert.StartPosition = FormStartPosition.CenterScreen;DialogResult result = frmInsert.ShowDialog();??????????if (result == DialogResult.OK){string strSql = "";???????int killWay = frmInsert.KillSetModel.KillWay;int killSeconds = frmInsert.KillSetModel.KillSeconds;List<int> components = frmInsert.KillSetModel.Components;string componentsNew = "";foreach (int i in components){componentsNew += (i + ",");}componentsNew = componentsNew.Substring(0, componentsNew.Length - 1);?//下面執行更新數據的操作}?
總結
以上是生活随笔為你收集整理的Winform中实现新增和更新共用一个页面的示例流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Angular新建组件以及组件之间的调用
- 下一篇: Angular中数据文本绑定、绑定Htm