思路
定義幾個類:
HealthCheckItem類:檢查項目
屬性:
public string Description { get; set; } public int Price { get; set; } public string Name { get; set; }
HealthCheckItem類中的方法:
//當選擇套餐下拉框中的套餐時,套餐下所有檢查項目都添加到dgvlist中顯示 public HealthCheckItem(string name, int price, string description) { Name = name; Price = price; Description = description; }
主界面:
//定義多個檢查項目 HealthCheckItem m,hg, wg, sg, hr, lf, eg, ba, bp, bt; //定義系統默認檢查套餐"入學體檢"; HealthCheckSet setA; //采用泛型集合List保存所有的體檢項目 List<HealthCheckItem> allitems = new List<HealthCheckItem>(); //采用泛型集合List保存套餐中的體檢項目 List<HealthCheckItem> items = new List<HealthCheckItem>(); //使用雙列集合(字典)保存套餐集合 public Dictionary<string, HealthCheckSet> hs = new Dictionary<string, HealthCheckSet>();
HealthCheckSet類:體檢套餐
屬性:
public int Price { get; set; }//Item屬性中檢查項目的價格之和 public string Name { get; set; } public List<HealthCheckItem> Items { get; set; }//Items是HealthCheckItem的集合,
HealthCheckSet類中的方法:
public HealthCheckSet() { Items = new List<HealthCheckItem>(); } public HealthCheckSet(string name, List<HealthCheckItem> items) { Name = name; Items = items; }
獲取價格的方法:
// 獲取價格的方法 public void CalcPrice() { int tatolPrice = 0; foreach (HealthCheckItem item in Items) { tatolPrice = tatolPrice + item.Price; } //套餐的價格等於每個體檢項目價格的和 Price = tatolPrice; }
添加新套餐:
//添加新套餐 private void btnAdd_Click(object sender, EventArgs e) { if (txtName.Text.Equals("")) { MessageBox.Show("請輸入套餐名稱!"); } else { HealthCheckSet hc = new HealthCheckSet(); hs.Add(txtName.Text, hc); // 調加載套餐下拉框信息方法 InitiateHealthSetList(); cboList.SelectedIndex = hs.Count(); lblname.Text = cboList.Text; hc.Name = cboList.Text; MessageBox.Show("添加成功!"); } }
加載套餐下拉框信息:
private void InitiateHealthSetList() { //加載套餐下拉框信息 //先清空下拉框列表 cboList.Items.Clear(); //添加請選擇 cboList.Items.Add("請選擇"); //將dictionary的key值綁定到下拉框中,作為下拉框顯示的值 foreach (string k in hs.Keys) { cboList.Items.Add(k); } //默認第一項被選中 cboList.SelectedIndex = 0; }
初始化檢查項目:
hg = new HealthCheckItem("身高", 15, "用於檢查身高"); wg = new HealthCheckItem("體重", 25, "用於檢查體重"); allitems.Add(hg); allitems.Add(wg);
添加檢查項目:
//添加檢查項目 private void btnOk_Click(object sender, EventArgs e) { if (cboProject.Text.Equals("請選擇")||cboProject.Text.Equals("")) { MessageBox.Show("請選擇項目"); return; } if (cboList.Text == "請選擇") { MessageBox.Show("請選擇套餐"); return; } //List<T>.Contains(對象)可以判斷某個對象是否在集合中 if (!hs[cboList.Text].Items.Contains(allitems[cboProject.SelectedIndex])) { //添加檢查項目 hs[cboList.Text].Items.Add(allitems[cboProject.SelectedIndex]); //重新計算總價格 hs[cboList.Text].CalcPrice(); //更新 UpdateSet(hs[cboList.Text]); //刷新窗體集合名稱 lblname.Text = hs[cboList.Text].Name; // //刷新窗體集合價格 lblprice.Text = hs[cboList.Text].Price.ToString(); MessageBox.Show("添加成功"); } else { MessageBox.Show("該項目已經存在"); } }
刪除體檢套餐信息:
//刪除信息 private void btnDelete_Click(object sender, EventArgs e) { if (this.dgvInfo.SelectedRows.Count == 0) { MessageBox.Show("請選擇要刪除的一行"); return; } //找索引 int index = dgvInfo.SelectedRows[0].Index; //刪除的檢查項目數據 //泛型集合刪除項目的方法:RemoveAt(); hs[cboList.Text].Items.RemoveAt(index); //重新計算價格 hs[cboList.Text].CalcPrice(); //更新dgvlist數據 UpdateSet(hs[cboList.Text]); lblname.Text = setA.Name; string choS = cboList.Text; lblprice.Text = hs[choS].Price.ToString(); }
填充套餐的dgvlist,更新套餐檢查項目
//填充套餐的dgvlist,更新套餐檢查項目 private void UpdateSet(HealthCheckSet set) { dgvInfo.DataSource = new BindingList<HealthCheckItem>(set.Items); }