思路
定義幾個類:
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);
}