1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Threading.Tasks;
9 using System.Windows.Forms;
10
11 namespace HealthCheck
12 {
13 public partial class FrmMain : Form
14 {
15 public FrmMain()
16 {
17 InitializeComponent();
18 }
19 List<HealthCheckItems> Items;//声明Items集合用于保存套餐中的体检项
20 List<HealthCheckItems> AllItems = new List<HealthCheckItems>();//声明AllItems集合,用于保存所有体检项
21 HealthCheckSet Hcs;//声明HealthCheckSet对象
22 //创建SetMeal字典
23 public Dictionary<string, HealthCheckSet> SetMeal = new Dictionary<string, HealthCheckSet>();
24
25 /// <summary>
26 /// 初始化各体检项,套餐并将全部检查项绑定到cmbItem中
27 /// </summary>
28 public void InitItems()
29 {
30 HealthCheckItems hc1 = new HealthCheckItems("用于检查身高","身高",5);
31 HealthCheckItems hc2 = new HealthCheckItems( "用于检查体重","体重", 5);
32 HealthCheckItems hc3 = new HealthCheckItems( "用于检查视力","视力", 10);
33 HealthCheckItems hc4 = new HealthCheckItems( "用于检查听力","听力", 10);
34 HealthCheckItems hc5 = new HealthCheckItems( "用于检查肝功能","肝功能", 50);
35 HealthCheckItems hc6 = new HealthCheckItems( "用于检查B超","B超", 30);
36 AllItems.Add(hc1);
37 AllItems.Add(hc2);
38 AllItems.Add(hc3);
39 AllItems.Add(hc4);
40 AllItems.Add(hc5);
41 AllItems.Add(hc6);
42
43 for (int i = 0; i < AllItems.Count; i++)
44 {
45 cmbItem.Items.Add(AllItems[i].Name);
46 }
47
48 Items = new List<HealthCheckItems>();
49 Items.Add(hc1);
50 Items.Add(hc2);
51 Items.Add(hc4);
52 Items.Add(hc5);
53 Hcs = new HealthCheckSet();
54 Hcs.Items = Items;
55 Hcs.Name = "入学体检";
56 Hcs.CalcPrice();
57 SetMeal.Add(Hcs.Name,Hcs);
58 BindList();
59 }
60 /// <summary>
61 /// 窗体加载
62 /// </summary>
63 /// <param name="sender"></param>
64 /// <param name="e"></param>
65 private void FrmMain_Load(object sender, EventArgs e)
66 {
67 InitItems();
68 }
69 /// <summary>
70 /// 选中套餐之后加载所对应的各项,并更新视图
71 /// </summary>
72 /// <param name="sender"></param>
73 /// <param name="e"></param>
74 private void cmbSetMealList_SelectedIndexChanged(object sender, EventArgs e)
75 {
76 string Name = this.cmbSetMealList.Text;
77 if (Name.Equals("请选择"))
78 {
79 dgvHealthCheckItem.DataSource = new BindingList<HealthCheckItems>();
80 lblTcName.Text = "";
81 lblPrice.Text = "";
82 btnAdd.Enabled = false;
83 btnDelete.Enabled = false;
84 }
85 else
86 {
87 UpdateView(SetMeal[Name]);
88 btnDelete.Enabled = true;
89
90 }
91 }
92 /// <summary>
93 /// 更新视图
94 /// </summary>
95 /// <param name="Hes"></param>
96 public void UpdateView(HealthCheckSet Hes)
97 {
98 dgvHealthCheckItem.DataSource = new BindingList<HealthCheckItems>(Hes.Items);
99 cmbItem.SelectedIndex = 0;
100 lblTcName.Text = Hes.Name;
101 lblPrice.Text = Hes.Price.ToString();
102 }
103 /// <summary>
104 /// 绑定套餐类到cmbSetMealList中
105 /// </summary>
106 public void BindList()
107 {
108 this.cmbSetMealList.Items.Clear();
109 this.cmbSetMealList.Items.Add("请选择");
110 foreach (var Hc in SetMeal.Keys)
111 {
112 cmbSetMealList.Items.Add(Hc);
113 }
114 cmbSetMealList.SelectedIndex = 0;
115 }
116 /// <summary>
117 /// 删除
118 /// </summary>
119 public void Delete()
120 {
121 //获取套餐名称
122 string Name = this.cmbSetMealList.Text;
123 //判断是否选中一行
124 if (dgvHealthCheckItem.SelectedRows.Count == 0)
125 {
126 MessageBox.Show("请选中要删除的项", "提示");
127 }
128 else
129 {
130 //获取选中项的索引
131 int index = dgvHealthCheckItem.SelectedRows[0].Index;
132 //删除选中项的集合
133 SetMeal[Name].Items.RemoveAt(index);
134 SetMeal[Name].CalcPrice();
135 //更新DataGridView视图
136 UpdateView(SetMeal[Name]);
137 MessageBox.Show("删除成功。", "提示", MessageBoxButtons.OK,
138
139 MessageBoxIcon.Information);
140 }
141 }
142 /// <summary>
143 /// 单击删除
144 /// </summary>
145 /// <param name="sender"></param>
146 /// <param name="e"></param>
147 private void btnDelete_Click(object sender, EventArgs e)
148 {
149 Delete();
150 }
151 /// <summary>
152 /// 选中体检项时,添加按钮可用
153 /// </summary>
154 /// <param name="sender"></param>
155 /// <param name="e"></param>
156 private void cmbItem_SelectedIndexChanged(object sender, EventArgs e)
157 {
158 this.btnAdd.Enabled = true;
159 }
160 /// <summary>
161 /// 添加
162 /// </summary>
163 public void Insert()
164 {
165 //获取当前套餐名字
166 string Name = cmbSetMealList.Text;
167 if (cmbItem.SelectedIndex == -1)
168 {
169 MessageBox.Show("请选择一个项目!");
170 }
171 else
172 {
173 //获取选中项目的下标
174 int index = cmbItem.SelectedIndex;
175 //判断套餐中的项目集合是否有选择的项目
176 if (!SetMeal[Name].Items.Contains(AllItems[index]))
177 {
178 //添加选择项目到套餐中
179 SetMeal[Name].Items.Add(AllItems[index]);
180
181 //重新计算
182 SetMeal[Name].CalcPrice();
183 //更新视图
184 UpdateView(SetMeal[Name]);
185 lblPrice.Text = SetMeal[Name].Price.ToString();
186 MessageBox.Show("添加成功!", "提示",
187
188 MessageBoxButtons.OK, MessageBoxIcon.Information);
189 }
190 else
191 {
192 MessageBox.Show("该项目存在!", "提示",
193
194 MessageBoxButtons.OK, MessageBoxIcon.Error);
195 }
196 }
197
198 }
199 /// <summary>
200 /// 单击添加
201 /// </summary>
202 /// <param name="sender"></param>
203 /// <param name="e"></param>
204 private void btnAdd_Click(object sender, EventArgs e)
205 {
206 Insert();
207 }
208 /// <summary>
209 /// 新建套餐
210 /// </summary>
211 public void NewSetMeal()
212 {
213 if (string.IsNullOrEmpty(txtSetMealName.Text.Trim()))
214 {
215 MessageBox.Show("请输入套餐名称!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
216 }
217 else
218 {
219 //获取新建套餐的名字
220 string NewName = txtSetMealName.Text.Trim();
221 //新建套餐类
222 Hcs= new HealthCheckSet();
223 Hcs.Name = NewName;
224 //添加到套餐字典中
225 SetMeal.Add(Hcs.Name, Hcs);
226 //套餐选择框加载
227 BindList();
228 //默认选中新建套餐
229 cmbSetMealList.SelectedIndex = SetMeal.Count;
230 //更新视图
231 UpdateView(SetMeal[NewName]);
232 MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
233 }
234 }
235 /// <summary>
236 /// 单击新建套餐
237 /// </summary>
238 /// <param name="sender"></param>
239 /// <param name="e"></param>
240 private void btnInsert_Click(object sender, EventArgs e)
241 {
242 NewSetMeal();
243 }
244 }
245 }