WCF医院管理系统技术解析(六)体检登记(五)对病人设置体检项目
新增保存好体检病人后,就需要为体检病人设置体检项目,点击体检登记病人界面中的设置体检项目按钮如下图
2.9.8(图53)
然后点击该界面中的保存按钮保存,就可以对病人设置好体检项目和体检套餐了。
该过程中涉及到的数据库表中的关系有:
表1:病人表
列名 | 数据类型 | 主键/外键 | 说明 |
PatientID | int | 主键 | 病人ID |
PatientCardNumber | nchar (50) |
| 病人卡号 |
PatientName | nchar (30) |
| 病人名称 |
RegisterCategoryID | int | 外键 | 挂号类别 ID |
AS_SexID | int | 外键 | 性别ID |
Birthday | datetime |
| 出生年月 |
IDCardNo | nchar (50) |
| 身份证号 |
AS_MaritalStatusID | int | 外键 | 婚姻情况ID |
Profession | nchar (50) |
| 所在职业 |
MemberTypeID | int | 外键 | 会员类型ID |
MedicareCardNumber | nchar (50) |
| 医保卡号 |
AS_InsuredTypeID | int | 外键 | 参保类型ID |
ContactTelephone | nchar (30) |
| 联系电话 |
ContactAddress | nchar (100) |
| 联系地址 |
DrugAllergyHistory | nchar (100) |
| 药物过敏史 |
PatientCategoryID | int | 外键 | 病人类别ID |
Age | nchar (30) |
| 年龄 |
AlphabeticBrevityCode | nchar (20) |
| 拼音简码 |
WubiInCode | nchar (20) |
| 五笔简码 |
ContactMobilePhone | nchar (30) |
| 联系手机 |
| nchar (30) |
| 电子邮件 |
Introducer | nchar (30) |
| 介绍人员 |
PersonalTaboo | nchar (70) |
| 个人忌讳 |
HighestReputation | nchar (70) |
| 信誉上限 |
NowIntegral | nchar (50) |
| 当前积分 |
Debt | decimal (18, 2) |
| 尚欠金额 |
ExpenseSum | decimal (18, 2) |
| 消费金额 |
LastTime | datetime |
| 上次时间 |
LastDoctor_StaffID | int | 外键 | 上次医生 |
Prescriptions | nchar (50) |
| 总处方数 |
PatientPhotos | char (200) |
| 病人照片 |
WhetherEffective | bit | ((1)) | 有效否 |
WhetherFromPhysicalExamination | Bit |
| 是否体检 |
表2项目表(ItemTable)
列名 | 数据类型 | 主键/外键 | 说明 |
ItemID | int | 主键 | 项目ID |
ItemName | nchar (70) | 外键 | 项目名称 |
ItemCoding | nchar (50) |
| 项目编号 |
AS_UserStatusID | int | 外键 | 使用状态ID |
ProjectPrice | decimal (18, 2) |
| 现金价格 |
TechnicalOfficesID | int | 外键 | 科室ID |
DiscountProportion | decimal (18, 2) |
| 折扣比例 |
WhetherEffective | bit | ((1)) | 有效否 |
ItemRemarks | nchar (100) |
| 项目备注 |
ItemUnit | nchar (20) |
| 项目单位 |
表3:体检套餐表 (PhysicalExaminationSetMealTable)
列名 | 数据类型 | 主键/外键 | 说明 |
PhysicalExaminationSetMealID | int | 主键 | 体检套餐ID |
PhysicalExaminationSetMealName | nchar (30) |
| 体检套餐名称 |
ChargeCategoryID | int | 外键 | 收费类别 ID |
CashPrice | decimal (18, 2) |
| 现金价格 |
DiscountRatio | decimal (18, 2) |
| 折扣比例 |
SetMealNumber | nchar (30) |
| 套餐编号 |
SetMealRemarks | nchar (150) |
| 套餐备注 |
AS_UsableStatusID | int | 外键 | 可用状态ID |
EntryStaff_StaffID | int | 外键 | 录入人员_员工ID |
EntryDate | datetime |
| 录入日期 |
UpdateStaff_StaffID | int | 外键 | 修改人员_员工ID |
UpdateDate | datetime |
| 修改日期 |
WhetherEffective | bit | ((1)) | 有效否 |
表4:体检套餐明细表(PhysicalExaminationSetMealDetailTable)
列名 | 数据类型 | 主键/外键 | 说明 |
PhysicalExaminationSetMealDetailID | int | 主键 | 体检套餐明细ID |
PhysicalExaminationSetMealID | int | 外键 | 体检套餐ID |
ItemID | int | 外键 | 项目ID |
WhetherEffective | bit | ((1)) | 有效否 |
表5:体检登记病人表(PW_PhysicalExaminationChargeBillPatientTable)
列名 | 数据类型 | 主键/外键 | 说明 |
PhysicalExaminationChargeBillPatientID | Int | 主键 | 体检登记病人ID |
PatientID | Int | 外键 | 病人ID |
ChargeBillID | Int | 外键 | 收费单ID |
AuxiliaryItemDetailID | Int | 外键 | 辅助项目明细ID |
WhetherChargeBill | Bit |
| 是否收费 |
该界面用到的控件
控件 | 说明
从工具箱中找到对应的控件,可以设置控件的一些属性和事件。如显示的文本,命名是规范
|
文本框 (TextBox) | |
下拉框 (ComBobox) | |
数据表格 (DataGridView) | |
按钮(Button) | |
标签 (Label) |
数据库中涉及到的储存过程有:(体检项目和体检套餐的数据表格的绑定)
--体检项目
IF(@Type='FRM_DuiBingRenSheZhiTiJianXiangMu_SelectItem')
BEGIN
SELECT LTRIM(RTRIM(ItemID)) AS ItemID,
LTRIM(RTRIM(ItemCoding)) AS ItemCoding,
LTRIM(RTRIM(ItemName)) AS ItemName,
LTRIM(RTRIM(ProjectPrice)) AS ProjectPrice
FROM BT_ItemTable
END
--体检套餐
IF(@Type='FRM_DuiBingRenSheZhiTiJianXiangMu_SelectPhysicalExaminationSetMeal')
BEGIN
SELECT LTRIM(RTRIM(PhysicalExaminationSetMealID)) AS PhysicalExaminationSetMealID,
LTRIM(RTRIM(SetMealNumber)) AS SetMealNumber,
LTRIM(RTRIM(PhysicalExaminationSetMealName)) AS PhysicalExaminationSetMealName,
LTRIM(RTRIM(CashPrice)) AS CashPrice
FROM BT_PhysicalExaminationSetMealTable
END
BLL中的方法有:
[OperationContract]
#region 查询体检项目
public DataSet FRM_DuiBingRenSheZhiTiJianXiangMu_SelectItem()
{
SqlParameter[] SQLCMDpas ={
new SqlParameter ("@Type",SqlDbType.Char),
};
SQLCMDpas[0].Value = "FRM_DuiBingRenSheZhiTiJianXiangMu_SelectItem";
DataTable myDataTable = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
DataSet myDataSet = new DataSet();
myDataSet.Tables.Add(myDataTable);
return myDataSet;
}
#endregion
[OperationContract]
#region 查询体检套餐
public DataSet FRM_DuiBingRenSheZhiTiJianXiangMu_SelectPhysicalExaminationSetMeal()
{
SqlParameter[] SQLCMDpas ={
new SqlParameter ("@Type",SqlDbType.Char),
};
SQLCMDpas[0].Value = "FRM_DuiBingRenSheZhiTiJianXiangMu_SelectPhysicalExaminationSetMeal";
DataTable myDataTable = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
DataSet myDataSet = new DataSet();
myDataSet.Tables.Add(myDataTable);
return myDataSet;
}
#endregion
UIL中代码:解释:绑定的体检套餐和体检项目供给医生对病人设置体检项目时选择对应的体检项目或者体检套餐,
窗体中的Laod事件中写如下代码:
dgvPhysicalExaminationItem.DataSource = myFRM_TiJianDengJi_MainClient.FRM_DuiBingRenSheZhiTiJianXiangMu_SelectItem().Tables[0];//绑定体检项目
dgvPhysicalExaminationSetMeal.DataSource = myFRM_TiJianDengJi_MainClient.FRM_DuiBingRenSheZhiTiJianXiangMu_SelectPhysicalExaminationSetMeal().Tables[0];//绑定体检套餐
在选择体检套餐或者体检项目的时候,就当次体检不能对同一个病人、设置相同的体检项目或者体检套餐,如果选择了相同的体检套餐或者体检项目,系统会提示用户。界面效果如图所示:
2.9.8(图54)
该过程不涉及数据库和BLL中的方法,其中涉及到的UIL中的代码有:
在选择体检项目的表格(dgv)上的体检项目中的CellClick事件有:
#region 体检项目中的CellClick事件
private void dgvPhysicalExaminationItem_CellClick(object sender, DataGridViewCellEventArgs e)
{
//项目类别ItemCategoryID用来判断表,值为1时是体检项目表、值为2时是化验项目表、值为3时是治疗项目表、值为4时是体检套餐表、值为5时是化验检查组合表
if (dgvAuxiliaryItemDetail.Rows.Count > 0)//判断dgvAuxiliaryItemDetail是否有数据,有数据就判断是否重复,
{
for (int i = 0; i < dgvAuxiliaryItemDetail.Rows.Count; i++)
{
int ItemID1 = Convert.ToInt32(dgvPhysicalExaminationItem.CurrentRow.Cells["体检项目ID"].Value);//获取体检项目ID
int ItemID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ID"].Value);//获取病人已经添加好的体检项目ID获取体检套餐ID
int ItemCategoryID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ItemCategoryID"].Value);//获取体检类型ID
if (ItemCategoryID == 4)//体检套餐
{
PhysicalExaminationSetMealID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ID"].Value);//获取已存在的体检套餐ID
//根据循环得到的体检套餐ID查询体检套餐明细
DataTable DTPhysicalExaminationSetMealDetail = myFRM_TiJianDengJi_MainClient.dgvPhysicalExaminationItem_CellClick_SelectPhysicalExaminationSetMealDetail(PhysicalExaminationSetMealID).Tables[0];
for (int j = 0; j < DTPhysicalExaminationSetMealDetail.Rows.Count; j++)//遍历体检套餐中的明细
{
int DetailItemID = Convert.ToInt32(DTPhysicalExaminationSetMealDetail.Rows[j]["ItemID"]);//获取体检项目ID
if (DetailItemID == ItemID1)//如果体检套餐中的明细中有项目ID与选择中的体检项目ID相同,就说明已经存在该体检项目
{
MessageBox.Show("已添加了含有该项目的体检套餐,不能再添加该项!");
return;//跳出循环
}
}
}
if (ItemID == ItemID1 && ItemCategoryID == 1)//项目类别ItemCategoryID用来判断表,值为1时是体检项目。
{
PhysicalExaminationItem = false;//不添加项目
MessageBox.Show("该项目已存在!");
break;
}
else//否则体检项目为真,可以添加体检项目
{
PhysicalExaminationItem = true;
}
}
}
else//否则没有数据,可以添加体检项目 即PhysicalExaminationItem 为 true
{
PhysicalExaminationItem = true;
}
if (PhysicalExaminationItem == true)//当开关为真时,新增项目
{
dgvAuxiliaryItemDetail.Rows.Add();//在病人需要的体检项目表格中添加条空白行
int rowsCount = dgvAuxiliaryItemDetail.Rows.Count - 1;//获取最后一行的数据
//把体检套餐中对应的值赋值给对应的列名
dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["ID"].Value = Convert.ToInt32(dgvPhysicalExaminationItem.CurrentRow.Cells["体检项目ID"].Value);
dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["编号"].Value = dgvPhysicalExaminationItem.CurrentRow.Cells["体检项目编号"].Value.ToString();
dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["名称"].Value = dgvPhysicalExaminationItem.CurrentRow.Cells["体检项目名称"].Value.ToString();
dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["价格"].Value = Convert.ToDecimal(dgvPhysicalExaminationItem.CurrentRow.Cells["体检现金价格"].Value);
dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["ItemCategoryID"].Value = 1;
//项目类别ItemCategoryID用来判断表,值为1时是体检项目表、值为2时是化验项目表、值为3时是治疗项目表、值为4时是体检套餐表、值为5时是化验检查组合表
}
}
#endregion
在选择体检套餐的表格(dgv)上的体检套餐中的CellClick事件有:
#region 体检套餐中的CellClick事件
private void dgvPhysicalExaminationSetMeal_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dgvAuxiliaryItemDetail.Rows.Count > 0)//判断dgvAuxiliaryItemDetail是否有数据
{
int intCountPhysicalExaminationSetMeal = 0;//用于判断选择的体检套餐与存在的体检套餐的比较,> 0存在体检套餐ID
for (int i = 0; i < dgvAuxiliaryItemDetail.Rows.Count; i++)//遍历存在的体检项目
{
int ItemID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ID"].Value);//获取体检项目ID或者体检套餐ID
int ItemID4 = Convert.ToInt32(dgvPhysicalExaminationSetMeal.CurrentRow.Cells["体检套餐ID"].Value);//获取选择的体检套餐ID
int ItemCategoryID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ItemCategoryID"].Value);//获取体检的类型
if (ItemCategoryID == 1)//为类型为体检项目 体检套餐与体检项目之间的比较
{
//根据选择的体检套餐ID查询出里面存在的体检项目
DataTable DtPhysicalExaminationSetMealDetail = myFRM_TiJianDengJi_MainClient.dgvPhysicalExaminationItem_CellClick_SelectPhysicalExaminationSetMealDetail(ItemID4).Tables[0];
for (int j = 0; j < DtPhysicalExaminationSetMealDetail.Rows.Count; j++)//遍历体检套餐
{
int DetailItemID = Convert.ToInt32(DtPhysicalExaminationSetMealDetail.Rows[j]["ItemID"]);//获取体检套餐明细中的体检项目ID
if (DetailItemID == ItemID)//如果选择的体检套餐明细中的体检项目ID与存在的体检项目ID相等,就说明已经存在该体检项目
{
MessageBox.Show("已添加了该体检套餐的明细单项,不能再添加该套餐!");
return;//跳出循环
}
}
}
if (ItemCategoryID == 4)//体检套餐与体检套餐之间的比较
{
//根据选择的体检套餐ID查询体检套餐明细中的体检项目ID
DataTable DtPhysicalExaminationSetMealDetail = myFRM_TiJianDengJi_MainClient.dgvPhysicalExaminationItem_CellClick_SelectPhysicalExaminationSetMealDetail(ItemID4).Tables[0];
for (int j = 0; j < DtPhysicalExaminationSetMealDetail.Rows.Count; j++)//遍历循环体检套餐
{
int DetailItemID = Convert.ToInt32(DtPhysicalExaminationSetMealDetail.Rows[j]["ItemID"]);//获取体检套餐中的体检项目ID
//根据已经存在的体检套餐ID查询体检套餐中的体检项目ID
DataTable dtExitPhysicalExaminationSetMealDetail = myFRM_TiJianDengJi_MainClient.dgvPhysicalExaminationItem_CellClick_SelectPhysicalExaminationSetMealDetail(ItemID).Tables[0];
for (int k = 0; k < dtExitPhysicalExaminationSetMealDetail.Rows.Count; k++)//遍历存在的体检套餐
{
if (Convert.ToInt32(dtExitPhysicalExaminationSetMealDetail.Rows[k]["ItemID"]) == DetailItemID)//如果存在的体检套餐明细中的体检项目ID与选择的体检套餐明细中的体检项目ID相等
{
intCountPhysicalExaminationSetMeal++;//变量累加 > 0就不添加体检套餐
}
}
}
}
if (ItemID == ItemID4 && ItemCategoryID == 4)//判断当新增的体检套餐ID的项目ID已存在;项目类别ItemCategoryID用来判断表,值为4时是体检套餐表。
{
PhysicalExaminationSetMeal = false;//开关为假
MessageBox.Show("该项目已存在!");
break;//跳出循环
}
else
{
PhysicalExaminationSetMeal = true; //开关为真
}
}
if (intCountPhysicalExaminationSetMeal > 0)//选择的体检套餐与存在的体检套餐中中有体检项目重复
{
MessageBox.Show("该套餐中已经有项目存在病人的体检信息中了,请选择其他体检套餐或者体检项目!");
return;//跳出循环
}
}
else
{
PhysicalExaminationSetMeal = true; //开关为真
}
if (PhysicalExaminationSetMeal == true) //当开关为真时,新增项目
{
dgvAuxiliaryItemDetail.Rows.Add();//在病人需要的体检项目表格中添加条空白行
int rowsCount = dgvAuxiliaryItemDetail.Rows.Count - 1;//获取最后一行的数据
//把体检套餐中对应的值赋值给对应的列名
dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["ID"].Value = Convert.ToInt32(dgvPhysicalExaminationSetMeal.CurrentRow.Cells["体检套餐ID"].Value);
dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["编号"].Value = dgvPhysicalExaminationSetMeal.CurrentRow.Cells["套餐编号"].Value.ToString();
dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["名称"].Value = dgvPhysicalExaminationSetMeal.CurrentRow.Cells["套餐名称"].Value.ToString();
dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["价格"].Value = Convert.ToDecimal(dgvPhysicalExaminationSetMeal.CurrentRow.Cells["现金价格"].Value);
dgvAuxiliaryItemDetail.Rows[rowsCount].Cells["ItemCategoryID"].Value = 4;
//项目类别ItemCategoryID用来判断表,值为1时是体检项目表、值为2时是化验项目表、值为3时是治疗项目表、值为4时是体检套餐表、值为5时是化验检查组合表
}
}
#endregion
对于已经添加好的体检项目或者体检套餐,还有移除该条体检项目获取体检套餐的作用:效果如图:
2.9.8(图55)
该过程不涉及数据库和BLL中的方法,其中涉及到的UIL中的代码有:
#region 移除
private void dgvAuxiliaryItemDetail_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)
{
string strItemName = dgvAuxiliaryItemDetail.CurrentRow.Cells["名称"].Value.ToString().Trim();
DialogResult dr = MessageBox.Show("是否移除 " + strItemName + "的体检项目?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);//弹出确定对话框
if (dr == DialogResult.OK)//如果点了确定按钮
{
dgvAuxiliaryItemDetail.Rows.RemoveAt(dgvAuxiliaryItemDetail.CurrentRow.Index);
}
}
}
#endregion
对病人设置好体检项目后,可以点击保存,然后病人的体检项目就设置好了。该过程涉及到的储存过程有:
新增辅助项目表:病人体检的项目ID保存进这张表中
--新增辅助项目
IF(@Type ='btnSave_Click_InsertAuxiliaryItemDetail')
BEGIN
INSERT PW_AuxiliaryItemDetailTable(OrdonnanceID , AllItemID, ItemCategoryID, WhetherEffective,AS_PhysicalExaminationRegisterID,WhetherOrdonnance,RegisterTime )
VALUES (@OrdonnanceID, @AllItemID, @ItemCategoryID, 1,362,0,GETDATE())
select @@IDENTITY
END
新增体检登记病人表:用于保存不经过挂号和处方的表,标识该病人不经过挂号和处方
--新增体检登记病人表中的病人ID和辅助项目ID
IF @Type = 'btnSave_Click_InsertPhysicalExaminationChargeBillPatient'
BEGIN
INSERT INTO PW_PhysicalExaminationChargeBillPatientTable
(PatientID,ChargeBillID, AuxiliaryItemDetailID,WhetherCharge )
VALUES (@PatientID,0, @AuxiliaryItemDetailID,0)
END
BLL中涉及到的储存过程有:
新增辅助项目表:
[OperationContract]
#region 新增辅助检查项目信息
public int btnSave_Click_InsertAuxiliaryItemDetail(int intOrdonnanceID, int intAllItemID, int intItemCategoryID)
{
SqlParameter[] SQLCMDpas ={
new SqlParameter ("@Type",SqlDbType.Char),
new SqlParameter ("@OrdonnanceID",SqlDbType.Int),
new SqlParameter ("@AllItemID",SqlDbType.Int),
new SqlParameter ("@ItemCategoryID",SqlDbType.Int),
};
SQLCMDpas[0].Value = "btnSave_Click_InsertAuxiliaryItemDetail";
SQLCMDpas[1].Value = intOrdonnanceID;
SQLCMDpas[2].Value = intAllItemID;
SQLCMDpas[3].Value = intItemCategoryID;
DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
int intCount = Convert.ToInt32(dt.Rows[0][0]);
return intCount;
}
#endregion
新增体检病人登记表:
#region 新增体检登记病人表中的病人ID和辅助项目ID
[OperationContract]
public int btnSave_Click_InsertPhysicalExaminationChargeBillPatient(int intPatientID, int intAuxiliaryItemDetailID)
{
SqlParameter[] SQLCMDpas ={
new SqlParameter ("@Type",SqlDbType.Char),
new SqlParameter ("@PatientID",SqlDbType.Int),
new SqlParameter ("@AuxiliaryItemDetailID",SqlDbType.Int),
};
SQLCMDpas[0].Value = "btnSave_Click_InsertPhysicalExaminationChargeBillPatient";
SQLCMDpas[1].Value = intPatientID;
SQLCMDpas[2].Value = intAuxiliaryItemDetailID;
int count = myDALMethod.UpdateData("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
return count;
}
#endregion
UIL中涉及到的代码有:
点击保存按钮中涉及的代码:
#region 保存按钮
private void btnSave_Click(object sender, EventArgs e)
{
if (dgvAuxiliaryItemDetail.Rows.Count > 0)//如果添加体检中的数据不为空
{
int intAuxiliaryItemDetailID = 0//用于新增辅助项目表;
int intCount = 0;//用于新增体检登记病人表
if (intPatientID > 0)//如果病人不为空
{
for (int i = 0; i < dgvAuxiliaryItemDetail.Rows.Count; i++)//遍历需要体检的体检项目
{
int intAllItemID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ID"].Value);//获取体检项目ID或者体检套餐ID
int intItemCategoryID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ItemCategoryID"].Value);//获取体检类型ID
//添加辅助项目表
intAuxiliaryItemDetailID = myFRM_TiJianDengJi_MainClient.btnSave_Click_InsertAuxiliaryItemDetail(intPatientID, intAllItemID, intItemCategoryID);
//添加体检登记病人表(就不经过挂号和处方的表)
intCount += myFRM_TiJianDengJi_MainClient.btnSave_Click_InsertPhysicalExaminationChargeBillPatient(intPatientID, intAuxiliaryItemDetailID);
}
}
if (intCount == dgvAuxiliaryItemDetail.Rows.Count)//如果intCount的变量等于dgvAuxiliaryItemDetail中行的集合
{
MessageBox.Show("新增辅助检查项目成功,新增的单是:" + strPatientCardNumber);//新增的病人卡号
this.Close ();
}
}
else
{
MessageBox.Show("请为该病人设置体检项目!");
}
}
#endregion
于已经设置好体检项目的病人,如果医生认为缺少体检项目,那么就可以对病人的体检项目进行修改,点击新增病人窗体中的,然后选择需要修改的体检病人,点击体检登记病人窗体中的
会看到如下界面:
选择需要添加的体检项目或者体检套餐,也可以点击删除已经对病人保存好的体检项目或者体检套餐 。(删除的思路解析: 删除时,因为对病人设置体检项目或者套餐时是把体检项目中的ID与体检套餐的ID保存进行辅助项目明细表中,那么删除时就应该把辅助项目明细表删除,但如果病人来医院的流程只是体检,不经过挂号和处方那么他不经过处方流程的标识是在体检登记病人表中有该病人的病人ID和辅助项目明细ID,那么如果对病人删除体检项目时,也应该删除该体检登记病人表中的辅助项目明细ID)
删除的体检项目或者体检套餐的储存过程为:
--删除辅助检查项目
IF @Type = 'dgvAuxiliaryItemDetail_CellClick_DeleteAuxiliaryItemDetailID'
BEGIN
DELETE PW_AuxiliaryItemDetailTable
WHERE PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = @AuxiliaryItemDetailID
DELETE PW_PhysicalExaminationChargeBillPatientTable
WHERE PW_PhysicalExaminationChargeBillPatientTable. AuxiliaryItemDetailID = @AuxiliaryItemDetailID
END
BLL中的方法有:
#region 删除辅助检查项目
[OperationContract]
public int dgvAuxiliaryItemDetail_CellClick_DeleteAuxiliaryItemDetailID(int intAuxiliaryItemDetailID)//获取界面中的辅助项目明细ID
{
SqlParameter[] SQLCMDpas ={
new SqlParameter ("@Type",SqlDbType.Char),
new SqlParameter ("@AuxiliaryItemDetailID",SqlDbType.Int),//根据传入的辅助项目明细ID进行删除
};
SQLCMDpas[0].Value = "dgvAuxiliaryItemDetail_CellClick_DeleteAuxiliaryItemDetailID";
SQLCMDpas[1].Value = intAuxiliaryItemDetailID;
int count = myDALMethod.UpdateData("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
return count;
}
#endregion
UIL中在病人体检项目的表格中找到表格的dgvAuxiliaryItemDetail_CellClick事件,表格如下:
涉及到的代码有:
private void dgvAuxiliaryItemDetail_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)//点击移除
{
if (dgvAuxiliaryItemDetail.CurrentRow.Cells["AuxiliaryItemDetailID"].Value == null)//如果辅助项目明细ID为空,即为修改中刚添加的体检项目(没有保存)
{
string strItemName = dgvAuxiliaryItemDetail.CurrentRow.Cells["名称"].Value.ToString().Trim();
if (MessageBox.Show("是否移除 " + strItemName + "的体检项目?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)
{
dgvAuxiliaryItemDetail.Rows.Remove(dgvAuxiliaryItemDetail.CurrentRow);//移除当前行
}
}
else
{
//存在辅助项目明细ID就进行删除操作
if (MessageBox.Show("是否删除该条选择?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)
{
int intAuxiliaryItemDetailID = Convert.ToInt32(dgvAuxiliaryItemDetail.CurrentRow.Cells["AuxiliaryItemDetailID"].Value);//获取辅助项目明细ID
int intItemCategoryID = Convert.ToInt32(dgvAuxiliaryItemDetail.CurrentRow.Cells["ItemCategoryID"].Value);//获取体检项目类型
if (intItemCategoryID == 4)//如果为体检套餐
{
string strPhysicalExaminationSetMealName = "";//声明一个变量
//根据体检套餐获取体检套餐明细
DataTable dtPhysicalExaminationSetMeal = myFRM_TiJianDengJi_MainClient.dgvAuxiliaryItemDetail_CellClick_SelectPhysicalExaminationSetMealOnAuxiliaryItemDetailID(intAuxiliaryItemDetailID).Tables[0];
string[] strPhysicalExaminationSetMeal = new string[dtPhysicalExaminationSetMeal.Rows.Count];//声明一个数组,长度为体检套餐明细中的总体检数
if (dtPhysicalExaminationSetMeal.Rows.Count > 0)//如果体检套餐大于0
{
for (int i = 0; i < dtPhysicalExaminationSetMeal.Rows.Count; i++)//遍历体检套餐明细
{
strPhysicalExaminationSetMeal[i] = dtPhysicalExaminationSetMeal.Rows[i]["ItemName"].ToString().Trim();//获取体检套餐明细中的体检项目
strPhysicalExaminationSetMealName += " "+ strPhysicalExaminationSetMeal[i];//用变量累加体检套餐中的所有体检项目
}
if (strPhysicalExaminationSetMealName != "")//如果变量不为空
{
//提示当前选择要进行删除的体检套餐中的体检项目
if (MessageBox.Show("你当前选择的是体检套餐,内有:" + strPhysicalExaminationSetMealName + "的体检项目,是否进行删除操作?", "系统提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
//进行删除辅助项目ID(里含体检套餐)
if (myFRM_TiJianDengJi_MainClient.dgvAuxiliaryItemDetail_CellClick_DeleteAuxiliaryItemDetailID(intAuxiliaryItemDetailID) > 0)
{
MessageBox.Show("删除体检项目成功!");
//删除体检套餐后,对应的体检项目在表格中移除
for (int k = dgvAuxiliaryItemDetail.Rows.Count - 1; k > 0; k--)
{
int intAuxiliaryItemDetailID1 = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[k].Cells["AuxiliaryItemDetailID"].Value);//获取表格中的辅助项目ID
if (intAuxiliaryItemDetailID1 == intAuxiliaryItemDetailID)//表格中的辅助项目ID与删除的体检项目ID相等
{
dgvAuxiliaryItemDetail.Rows.RemoveAt(k);//进行移除
}
}
}
}
return;//跳出该方法
}
}
}
//选择的是体检项目,直接进行体检项目的删除
if (myFRM_TiJianDengJi_MainClient.dgvAuxiliaryItemDetail_CellClick_DeleteAuxiliaryItemDetailID(intAuxiliaryItemDetailID) > 0)
{
MessageBox.Show("删除体检项目成功!");
dgvAuxiliaryItemDetail.Rows.Remove(dgvAuxiliaryItemDetail.CurrentRow);
//删除后,直接移除当前行的数据
}
else
{
MessageBox.Show("删除体检项目失败!");
}
}
}
}
}
修改完成了病人的体检项目或者体检套餐,必须要点击保存按钮进行修改保存的操作:
涉及到的储存过程有:
-修改辅助项目
IF(@Type ='btnSave_Click_UpdateAuxiliaryItemDetail')
BEGIN
UPDATE PW_AuxiliaryItemDetailTable
SET OrdonnanceID =@OrdonnanceID, AllItemID =@AllItemID, ItemCategoryID =@ItemCategoryID
WHERE PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = @AuxiliaryItemDetailID
END
BLL中的方法有:
region 修改辅助检查项目信息
[OperationContract]
public int btnSave_Click_UpdateAuxiliaryItemDetail(int intPatientID, int intAllItemID, int intItemCategoryID, int intAuxiliaryItemDetailID1)//根据界面中传入的病人ID,体检项目(套餐)ID,体检类型ID,辅助项目明细ID
{
SqlParameter[] SQLCMDpas ={
new SqlParameter ("@Type",SqlDbType.Char),
new SqlParameter ("@PatientID",SqlDbType.Int),//把病人ID传入数据库中并保存下来
new SqlParameter ("@AllItemID",SqlDbType.Int),//把体检项目(或套餐)ID传入数据库中并保存下来
new SqlParameter ("@ItemCategoryID",SqlDbType.Int), //把体检类型ID传入数据库中并保存下来
new SqlParameter ("@AuxiliaryItemDetailID",SqlDbType .Int ),//根据某具体的辅助项目明细ID进行修改
};
SQLCMDpas[0].Value = "btnSave_Click_UpdateAuxiliaryItemDetail";
SQLCMDpas[1].Value = intPatientID;
SQLCMDpas[2].Value = intAllItemID;
SQLCMDpas[3].Value = intItemCategoryID;
SQLCMDpas[4].Value = intAuxiliaryItemDetailID1;
int count = myDALMethod.UpdateData("TiJianZhongXin_TiJianDengJi_Main", SQLCMDpas);
return count;
}
#endregion
UIL中的代码有:
#region 保存按钮
private void btnSave_Click(object sender, EventArgs e)
{
int intAuxiliaryItemDetailID = 0; //变量获取需要修改的辅助明细项目ID
int intCountUpdate = 0;//修改成功用到的变量
int intCountInsert = 0;//新增成功用到的变量
if (intPatientID > 0)//如果病人ID不为空
{
for (int i = 0; i < dgvAuxiliaryItemDetail.Rows.Count; i++)//遍历病人的体检项目明细表
{
int intAllItemID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ID"].Value);//获取体检项目ID获取体检套餐ID
int intItemCategoryID = Convert.ToInt32(dgvAuxiliaryItemDetail.Rows[i].Cells["ItemCategoryID"].Value);//获取体检类型ID
if (dgvAuxiliaryItemDetail.Rows[i].Cells["AuxiliaryItemDetailID"].Value == null)//如果表格中的辅助项目明细ID为空,说明该条数据为刚刚添加的数据
{
//根据病人ID和体检项目(套餐)ID,体检类型ID进行新增辅助项目明细表
intAuxiliaryItemDetailID = myFRM_TiJianDengJi_MainClient.btnSave_Click_InsertAuxiliaryItemDetail(intPatientID, intAllItemID, intItemCategoryID);
//添加体检登记病人表(就不经过挂号和处方的表)把刚刚添加的病人ID和辅助项目明细ID保存进数据库中
intCountInsert += myFRM_TiJianDengJi_MainClient.btnSave_Click_InsertPhysicalExaminationChargeBillPatient(intPatientID, intAuxiliaryItemDetailID);
}
else
{
//获取辅助项目明细ID
int intAuxiliaryItemDetailID1 = Convert .ToInt32 (dgvAuxiliaryItemDetail .Rows[i].Cells["AuxiliaryItemDetailID"].Value );
//根据辅助馪明细ID进行修改辅助项目明细表
intCountUpdate += myFRM_TiJianDengJi_MainClient.btnSave_Click_UpdateAuxiliaryItemDetail(intPatientID, intAllItemID, intItemCategoryID, intAuxiliaryItemDetailID1);
}
}
//如果存在新增变量>0 或者修改变量>0 或者新增和修改的变量都大于零,说明修改成功!
if (intCountInsert > 0 || intCountUpdate > 0 || intCountUpdate > 0 && intCountInsert > 0)
{
MessageBox.Show ("修改该病人的体检项目成功!");
this.Dispose ();//释放资源
this.Close();//关闭窗体
}
else
{
MessageBox.Show ("修改改病人的体检项目失败!");
}
}
else
{
MessageBox.Show("请选择需要修改的体检病人!");
}
}
#endregion
这样对病人的设置体检项目就已经完成了,设置好了病人的体检项目后病人就必须到前台进行支付体检的相关费用,然后进行体检。。。