第五章使用Dictionary替换List<t>实现功能

    /// <summary>     /// 体检项目类     /// 保存一个体检项目包括项目名、描述、单价     /// 例如:肝功能、用于检察肝功能、60     /// </summary>    public  class HealthCheckItem2     {

       public HealthCheckItem2(string name, string description,decimal price)        {            this.Name = name;            this.Description = description;            this.Price = price;

       }

        private string name;         /// <summary>         /// 项目名称         /// </summary>         public string Name         {             get { return name; }             set { name = value; }         }         /// <summary>         /// 项目描述         /// </summary>         private string description;         public string Description         {             get { return description; }             set { description = value; }         }

        /// <summary>         /// 项目价格         /// </summary>         private decimal price;         public decimal Price         {             get { return price; }             set { price = value; }         }

    }

}

---------------------------------------------------------------------------------------------------------

    /// <summary>     /// 体检套餐类     /// 每个套餐包括要检查的项目、套餐名称、总价     /// </summary>    public  class HealthCheckSet2     {

         public HealthCheckSet2(string name, Dictionary<string, HealthCheckItem2> items)         {             this.Name = name;             this.Items = items;         }          public HealthCheckSet2()          {              items = new Dictionary<string, HealthCheckItem2>();          }

        /// <summary>         /// 套餐名称         /// </summary>         private string name;         public string Name         {             get { return name; }             set { name = value; }         }         /// <summary>         /// 检查项目         /// </summary>         private Dictionary<string, HealthCheckItem2> items;         public Dictionary<string, HealthCheckItem2> Items         {             get { return items; }             set { items = value; }         }         /// <summary>         /// 套餐价格         /// </summary>         private decimal price;         public decimal Price         {             get { return price; }             set { price = value; }            

        }         /// <summary>         /// 套餐计算方法         /// </summary>         public void CalcPrice()         {             int totalPrice = 0;             foreach (HealthCheckItem2 item in items.Values)             {                 totalPrice += (int)item.Price;             }             this.Price = totalPrice;                     }

    }

}

----------------------------------------------------------------------------------------------------------

namespace Admin {     public partial class btn_add : Form     {         public btn_add()         {             InitializeComponent();         }         //定义几个检查项目         HealthCheckItem2 thitem, thitem1, thitem2, thitem3, thitem4, thitem5, thitem6, thitem7, thitem8;         //定义1个系统默认检查套餐“入学体检”         HealthCheckSet2 kset;         //保存原始的 AllItems数据         Dictionary<string, HealthCheckItem2> AllItems = new Dictionary<string, HealthCheckItem2>();         //保存套餐中的Item数据         Dictionary<string, HealthCheckItem2> items = new Dictionary<string, HealthCheckItem2>();         //保存项目中的Item数据         Dictionary<string, HealthCheckItem2> head = new Dictionary<string, HealthCheckItem2>();

        //使用字典保存套餐集合         public Dictionary<string, HealthCheckSet2> HealthSet = new Dictionary<string, HealthCheckSet2>();

        public Dictionary<string, HealthCheckItem2> hast = new Dictionary<string, HealthCheckItem2>();

        /// <summary>         /// 创建所有检查项目,并保存在AllItems集合中         /// </summary>         public void InitItems()         {             thitem = new HealthCheckItem2("身高", "用于检查身高", 5);             thitem1 = new HealthCheckItem2("体重", "用于检查体重", 5);             thitem2 = new HealthCheckItem2("视力", "用于检查视力", 15);             thitem3 = new HealthCheckItem2("听力", "用于检查听力.", 10);             thitem4 = new HealthCheckItem2("肝功能", "用于检查肝功能",10);             thitem5 = new HealthCheckItem2("B超", "用于检查B超", 10);             thitem6 = new HealthCheckItem2("心电图", "用于检查心电图.", 10);             thitem7 = new HealthCheckItem2("血压", "用于检查血压.", 20);             thitem8 = new HealthCheckItem2("血常规", "用于检查血常规.", 20);             AllItems.Add(thitem.Name ,thitem);             AllItems.Add(thitem1.Name, thitem1);             AllItems.Add(thitem2.Name, thitem2);             AllItems.Add(thitem3.Name, thitem3);             AllItems.Add(thitem4.Name, thitem4);             AllItems.Add(thitem5.Name, thitem5);             AllItems.Add(thitem6.Name, thitem6);             AllItems.Add(thitem7.Name, thitem7);             AllItems.Add(thitem8.Name, thitem8);

        }         /// <summary>         /// 生成默认套餐数据         /// </summary>         public void InitSets()         {

            //创建1种默认套餐对象             items = new Dictionary<string, HealthCheckItem2>();             items.Add(thitem.Name,thitem);             items.Add(thitem1.Name,thitem1);             items.Add(thitem2.Name,thitem2);             kset = new HealthCheckSet2("贵宾", items);             //计算套餐价格             kset.CalcPrice();             this.HealthSet.Add("贵宾", kset);

        }

           

        /// <summary>         /// 加载体检套餐         /// </summary>         public void InitHealthSetList()         {             //清空套餐项             this.cmb_taocan.Items.Clear();             this.cmb_taocan.Items.Add("请选择");             foreach(string key in this.HealthSet.Keys)             {                 this.cmb_taocan.Items.Add(key);

            }             this.cmb_taocan.SelectedIndex = 0;

        }

        /// <summary>         /// 窗体加载事件         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void Frm_admin2_Load(object sender, EventArgs e)         {

            //禁止添加列             dgv_list.AutoGenerateColumns = false;             this.lbl_name.Text = "";             this.lbl_price.Text = "";             this.btn_insert1.Enabled = false;             this.btn_delete.Enabled = false;             //初始化所有检查项目             InitItems();             //初始化默认套餐             InitSets();             //加载套餐列表             InitHealthSetList();

        }

        /// <summary>         /// 填充套餐的DataGridView         /// </summary>         /// <param name="set"></param>         public void Updateset(HealthCheckSet2 set)         {             this.dgv_list.DataSource = new BindingList<HealthCheckItem2>(set.Items.Values.ToList());                    }         //选择“套餐”下拉列表更改时发生的事件         private void cmb_taocan_SelectedIndexChanged(object sender, EventArgs e)         {             string setname = this.cmb_taocan.Text;             if(setname=="请选择")             {                 this.dgv_list.DataSource = new BindingList<HealthCheckItem2>();                 lbl_name.Text = "";                 lbl_price.Text = "";                 return;

            }             //设置套餐名称             lbl_name.Text = this.HealthSet[setname].Name;             //设置套餐总价             lbl_price.Text = this.HealthSet[setname].Price.ToString();             //更新套餐检查项目             Updateset(HealthSet[setname]);             //设置删除按钮为“可用状态”             this.btn_delete.Enabled = true;

        }         //删除的事件         private void btn_delete_Click(object sender, EventArgs e)         {             string setname = this.cmb_taocan.Text;             if(this.dgv_list.SelectedRows.Count==0)             {                 MessageBox.Show("没有删除项","提示",MessageBoxButtons.OK,MessageBoxIcon.Error);                 return;             }             //获取选中项的索引             int index = this.dgv_list.SelectedRows[0].Index;             //获取选中一行             string key = this.dgv_list.SelectedRows[0].Cells[0].Value.ToString();             //删除检查项             this.HealthSet[setname].Items.Remove(key);

           //重新计算价格             this.HealthSet[setname].CalcPrice();             //更新DaaGridView显示             Updateset(HealthSet[setname]);             //重设标签显示             this.lbl_name.Text = kset.Name;             this.lbl_price.Text = kset.Price.ToString();             MessageBox.Show("删除成功","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

        }         //根据是否选择体检项目,设置“添加”显示状态         private void cmb_xianmu_SelectedIndexChanged(object sender, EventArgs e)         {

            if (this.cmb_xianmu.Text != "请选择")             {                 this.btn_insert1.Enabled = true;             }             else             {                 this.btn_insert1.Enabled = false;

            }

        }         //添加检查项目         private void btn_insert1_Click(object sender, EventArgs e)         {             //输入判断             if(this.cmb_xianmu.SelectedIndex==0)             {                 MessageBox.Show("请选择一个项目");                 return;             }             string cmbsetText = this.cmb_taocan.Text;             if(cmbsetText=="请选择")             {                 MessageBox.Show("请选择套餐");                 return;             }             //添加操作             int index = this.cmb_xianmu.SelectedIndex - 1;             string add = this.cmb_xianmu.Text;             if (!this.HealthSet[cmbsetText].Items.Keys.ToList().Contains(add))             {                 //添加检查项                 this.HealthSet[cmbsetText].Items.Add(add,AllItems[add]);                 //重新计算总价格                 this.HealthSet[cmbsetText].CalcPrice();                 //更新                 Updateset(this.HealthSet[cmbsetText]);                 //刷新窗体集合名称                 this.lbl_name.Text = this.HealthSet[cmbsetText].Name;                               ////刷新集合价格                 this.lbl_price.Text = this.HealthSet[cmbsetText].Price.ToString();                 MessageBox.Show("添加成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);             }             else             {                 MessageBox.Show("该项目已存在","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

            }         }

        //新建套餐

        private void button1_Click(object sender, EventArgs e)         {

            if (string.IsNullOrEmpty(this.txt_name.Text.Trim()))             {                 MessageBox.Show("请输入套餐名称!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);                 return;                   }             HealthCheckSet2 Hch = new HealthCheckSet2();             this.HealthSet.Add(this.txt_name.Text.Trim(), Hch);             this.InitHealthSetList();             this.cmb_taocan.SelectedIndex = this.HealthSet.Count;             MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

       }

    }

}

原文地址:https://www.cnblogs.com/1-9-9-5/p/6686118.html