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
這樣對病人的設置體檢項目就已經完成了,設置好了病人的體檢項目後病人就必須到前臺進行支付體檢的相關費用,然後進行體檢。。。