1.3/// //定义几个检查项目 CheckItem sg, tz, sl, tl, ggn, bc, xdt; //定义一个系统默认的检查套餐“入学体检” CheckSet cset; //记录套餐中的体检项目 List<CheckItem> list = new List<CheckItem>(); //记录所有体检项目 Dictionary<String, CheckItem> Items = new Dictionary<string, CheckItem>(); //使用字典保存项目套餐 Dictionary<string, CheckSet> set = new Dictionary<string, CheckSet>(); 1.4///创建一个存储数据的方法 // 初始化体检项目 private void InsertItems() { sg = new CheckItem("身高", "用于检查身高", 5); tz = new CheckItem("体重", "用于检查体重", 5); sl = new CheckItem("视力", "用于检查视力", 10); tl = new CheckItem("听力", "用于检查听力", 50); ggn = new CheckItem("肝功能", "用于检查肝功能", 50); bc = new CheckItem("B超", "用于检查B超", 30); xdt = new CheckItem("心电图", "用于检查心电图", 50); Items.Add(sg.Name, sg); Items.Add(tz.Name, tz); Items.Add(sl.Name, sl); Items.Add(tl.Name, tl); Items.Add(ggn.Name, ggn); Items.Add(bc.Name, bc); Items.Add(xdt.Name, xdt); } 1.5/// // 初始化体检项目列表 private void InsertItemsList() { cbo02.Items.Clear(); cbo02.Items.Add("请选择"); foreach (string key in Items.Keys) { cbo02.Items.Add(key); } cbo02.SelectedIndex = 0; } 1.6 //初始化套餐 private void InitSets() { list.Add(sg); list.Add(tz); list.Add(ggn); cset = new CheckSet("入学体检", list); cset.CalcPrice(); set.Add("入学体检", cset); } 1.7 // 添加套餐下拉列表 private void InitSetsList() { cbo01.Items.Clear(); cbo01.Items.Add("请选择"); foreach (string key in set.Keys) { cbo01.Items.Add(key); } cbo01.SelectedIndex = 0; } 1.8 //显示方法 private void UpdateSet(CheckSet set) { //判断套餐中检查项目集合为空的时候DataGridView就不显示信息 if (set.list == null) { dgvList.DataSource = new BindingList<CheckItem>(); } else { dgvList.DataSource = new BindingList<CheckItem>(set.list); } } 1.9///在主窗体load事件里加载 private void FrmMain_Load(object sender, EventArgs e) { InsertItems(); //初始化体检项目 InsertItemsList(); //初始化体检项目列表 InitSets(); //初始化套餐 InitSetsList(); //添加套餐下拉列表 } 2.0/// private void btn02_Click(object sender, EventArgs e) { //判断套餐是否存在要添加的体检项目 if (!set[cbo01.Text].list.Contains(Items[cbo02.Text])) { set[cbo01.Text].list.Add(Items[cbo02.Text]); MessageBox.Show("添加成功"); //绑定dgvList dgvList.DataSource = new BindingList<CheckItem>(set[cbo01.Text].list); set[cbo01.Text].CalcPrice(); //计算套餐价格 lbl000.Text = set[cbo01.Text].Prices.ToString(); } else { MessageBox.Show("已经有该项目的存在了", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error); } } 2.1 private void cbo01_SelectedIndexChanged(object sender, EventArgs e) { //套餐列表等于请选择的时候删除按钮Enabled就为false if (cbo01.Text == "请选择") { this.btn03.Enabled = false; } else { this.btn03.Enabled = true; lbl00.Text = this.set[cbo01.Text].Name; lbl000.Text = this.set[cbo01.Text].Prices.ToString(); if (set[cbo01.Text] != null) { UpdateSet(set[cbo01.Text]); //调用显示方法 } } } 2.2 private void btn01_Click(object sender, EventArgs e) { string name = txt01.Text; if (!txt01.Text.Equals(string.Empty)) { //判断是否在体检套餐中存在 if (set.Keys.Contains(name)) { MessageBox.Show("已经有该套餐了", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error); return; } else { //添加新的体检项目 list = new List<CheckItem>(); cset = new CheckSet(name, list); cset.CalcPrice(); //体检套餐价格 set.Add(name, cset); InitSetsList(); //刷新体检套餐下拉列表 cbo01.Text = name; //体检套餐下拉列表等于新添加的套餐名称 txt01.Text = ""; } } else { MessageBox.Show("添加条件不能为空!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error); } } 2.3///删除按钮的事件里 private void btn03_Click(object sender, EventArgs e) { //判断是否选中一行 if (dgvList.SelectedRows.Count == 1) { string key = dgvList.SelectedRows[0].Cells[1].Value.ToString(); set[cbo01.Text].list.Remove(Items[key]); MessageBox.Show("删除成功!"); UpdateSet(set[cbo01.Text]); set[cbo01.Text].CalcPrice(); lbl000.Text = set[cbo01.Text].Prices.ToString(); } else { MessageBox.Show("请选择选中一行!"); } } 2.4///在下拉列表框里判断 private void cbo02_SelectedIndexChanged(object sender, EventArgs e) { if (cbo02.Text == "请选择") { this.btn02.Enabled = false; } else { btn02.Enabled = true; } } 2.5///创建CheckItem类 public class CheckItem { public string Description { get; set; } public string Name { get; set; } public int Price { get; set; } //创建无参构造 public CheckItem() { } //创建有参构造 public CheckItem(string name, string description, int price) { this.Description = description; this.Name = name; this.Price = price; } } 2.6///创建CheckSet类 public class CheckSet { //检查项目的集合 public List<CheckItem> list { get; set; } public int Prices { get; set; } public string Name { get; set; } //无参构造 public CheckSet() { list = new List<CheckItem>(); } //带参构造 public CheckSet(string name, List<CheckItem> list) { this.Name = name; this.list = list; } //套餐价格计算 public void CalcPrice() { int StratPrice = 0; foreach (CheckItem item in list) { StratPrice += item.Price; } Prices = StratPrice; } }