WCF醫院管理系統技術解析 (二)體檢登記(一)

WCF醫院管理系統技術解析 (二)體檢登記(一)


體檢登記模塊

體檢登記這個模塊主要是記錄需要體檢的病人信息 ,如每次體檢的項目、和相關現金價格,以及項目類型和體檢狀態等等體檢信息。可以通過查詢病人姓名和病人卡號進行篩選查詢,還可以對“未登記”病人進行提交體檢登記 以及新增體檢病人、對新增的體檢病人進行前臺收費、關閉當前頁面和進入上下頁等。

界面效果圖:


2.9.8(1)

從界面上可以看到我們這裏用到的控件有

   控件

          說明

從工具箱中找到對應的控件,可以設置控件的一些屬性和事件。如顯示的文本,命名是規範

 

文本框 (TextBox)

下拉框 (ComBobox)

數據表格  (DataGridView)

按鈕(Button)

標籤 (Label)




查詢功能實現:

第一步數據庫:


2.9.8(2)


2.9.8(3)

2.9.8(4)


2.9.8(5)


1:員工表BT_StaffTable

用於記錄跟蹤病人開單的信息

            列名

數據類型

主鍵/外鍵

說明

StaffID

int

       主鍵

員工ID

TechnicalOfficesID

int

       外鍵

科室ID

StaffNumber

nchar (20)

 

員工編號

StaffName

nchar (20)

 

員工名稱

WhetherOperator

bit

 

操作員否

AlphabeticBrevityCode

nchar (20)

 

拼音簡碼

WubiInCode

nchar (20)

 

五筆簡碼

AS_StaffPositionID

int

       外鍵

員工職務ID

AS_MedicalTitlesID

int

       外鍵

醫務職稱ID

AS_WorkingStatusID

int

       外鍵

工作狀態ID

AS_SexID

int

       外鍵

性別ID

ContactTelephone

nchar (50)

 

聯繫電話

WhetherBuiltIn

bit

 

內置否

RegisteredSum

decimal (18, 2)

 

掛號金額

AS_IntoTheHobbyID

int

        外鍵

錄入愛好ID

StaffPhotos

char (200)

 

員工照片

Email

nchar (70)

 

電子郵件

IDCardNo

nchar (100)

 

身份證號

ContactAddress

nchar (100)

 

聯繫地址

Birthday

datetime

 

出生日期

WhetherBirthdayRemind

bit

 

生日提醒否

WorkDate

datetime

 

工作日期

TerminationDate

datetime

 

離職日期

AS_OfficialAcademicCredentialsID

int

        外鍵

最高學歷ID

StudySubject

nchar (70)

 

學習專業

AS_PoliticsStatusID

int

        外鍵

政治面貌ID

Remarks

nchar (100)

 

員工備註

WhetherEffective

bit

((1))

有效否



2:收費單表(PW_ChargeBillID) 

用於對病人的處方單或者其他收費單進行收費的憑證

 

        列名

數據類型

主鍵/外鍵

說明

ChargeBillID

int

       主鍵

收費單ID

ReceiptNumber

nchar (30)

 

收據號

BillNumber

nchar (30)

 

發票號

AS_ChargeStatusID

int

       外鍵

收費狀態ID

OrdonnanceID

int

       外鍵

處方單ID

Discount

decimal (18, 2)

 

折扣

CashPaySum

decimal (18, 2)

 

現金支付金額

MedicarePaySum

decimal (18, 2)

 

醫保支付金額

BlockPaySum

decimal (18, 2)

 

卡付金額

TallyPaySum

decimal (18, 2)

 

記賬支付金額

Operator_StaffID

int

       外鍵

操作員_員工ID

OperateTime

datetime

 

操作時間

WhetherCancel

bit

 

作廢否

WhetherEffective

bit

((1))

有效否

WhetherOrdonnance

Bit

 

是否經過處方


3:體檢登記病人表(PW_PhysicalExaminationChargeBillPatientTable) 

用於記錄不經過處方只是體檢的病人的收費情況

            列名

數據類型

主鍵/外鍵

說明

PhysicalExaminationChargeBillPatientID

Int

    主鍵

  體檢登記病人ID

PatientID

Int

    外鍵

  病人ID

ChargeBillID

Int

    外鍵

  收費單ID

AuxiliaryItemDetailID

Int

    外鍵

   輔助項目明細ID

WhetherChargeBill

Bit

 

  是否收費


4輔助項目明細表 (PW_AuxiliaryItemDetailTable)  

用於對病人設置體檢、化驗項目或組合

            列名

數據類型

主鍵/外鍵

說明

AuxiliaryItemDetailID

int

      主鍵

輔助明細項目ID

RegisterID

int

      外鍵

掛號ID

AllItemID

int

      外鍵

總項目ID

ItemCategoryID

int

      外鍵

項目類別ID

WhetherEffective

bit

      ((1))

是否有效

AS_PhysicalExaminationRegisterID

int

      外鍵

體檢登記ID

OrdonnanceID

int

      外鍵

處方單ID



5:項目類別表 (PW_ItemCategoryTable
用於判斷病人的項目類別

            列名

數據類型

主鍵/外鍵

說明

ItemCategoryID

int

 主鍵

項目類別ID

ItemCategoryName

nchar (30)

    外鍵

項目類別名稱


6:病人表(BT_PatientTable)
用於新增病人

      列名

數據類型

主鍵/外鍵

說明

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)

 

聯繫手機

Email

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

 

是否體檢



7:屬性明細表(BT_AttributeDetailsTable) 

用於普通常用字段錄入

         列名

數據類型

主鍵/外鍵

說明

AttributeDetailsID

int

    主鍵

屬性明細ID

AttributeDetailsID_F

int

    外鍵

屬性明細ID_F

AttributeSetID

int

    外鍵

屬性明細ID

AttributeDetailsName

nchar (30)

 

屬性明細名稱

Number

nchar (30)

 

編號

RetrievalInCode

nchar (30)

 

檢索簡碼

BuiltInIdentifiers

bit

((0))

內置標識

Remarks

nchar (100)

 

備註

WhetherEffective

bit

((1))

有效否



8:處方單表(PW_OrdonnanceTable 

用於對體檢病人進行開處方

      列名

數據類型

主鍵/外鍵

說明

OrdonnanceID

int

    主鍵

處方單ID

OrdonnanceNumber

nchar (30)

 

處方單號

PatientID

int

    外鍵

病人ID

PrescriptionDate

datetime

 

處方時間

ClinicTechnicalOffices_TechnicalOfficesID

int

    外鍵

就診科室_科室ID

TreatmentDoctor_StaffID

int

    外鍵

就診醫生_員工ID

AS_ChargeStatusID

int

    外鍵

收費狀態ID

ChargeForPersonnel_StaffID

int

    外鍵

收費人員_員工ID

ChargeTime

datetime

 

收費時間

AS_TakeMedicineStatusID

int

    外鍵

發藥狀態ID

TakeMedicinePersonnel_StaffID

int

    外鍵

發藥人員_員工ID

TakeMedicineTime

datetime

 

發藥時間

BedID

int

    外鍵

牀位ID

WhetherEffective

bit

((1))

有效否




控件使用方法:

Labe爲例(其他控件的使用方法大同小異)Label的使用方法如下:

點擊工具箱,拖動Label到界面


2.9.8(6)

右鍵設置該控件中的屬性樣式和事件等如圖:


2.9.8(7)

控件下拉框的數據綁定:下拉框主要綁定數據供用戶選擇合適需要的基礎數據


2.9.8(8)

數據庫中的儲存過程:(其他涉及到數據綁定的控件都需要用到對應的儲存過程,方法和這個類似,下面就不截圖了)


2.9.8(9)


--綁定性別
	IF @Type = 'FRM_TiJianDengJi_Main_cbo_AS_SexID'
	BEGIN
		SELECT     RTRIM(AttributeDetailsID) AS AttributeDetailsID, RTRIM(AttributeDetailsName) AS AttributeDetailsName
		FROM         BT_AttributeDetailsTable
		WHERE AttributeSetID = 2
	END


BLL(邏輯層)中的方法:

與數據庫對應的BLL,方法都是找到對應的BLL在裏面寫代碼和這個類似,下面就不截圖了


2.9.8(10)


#region 綁定性別
         [OperationContract]
        public DataSet FRM_TiJianDengJi_Main_cbo_AS_SexID()
        {
            SqlParameter[] mySqlParameters = {
                                              new SqlParameter("@Type",SqlDbType .Char ),
                                              };
            mySqlParameters[0].Value = "FRM_TiJianDengJi_Main_cbo_AS_SexID ";
            DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;
        }
          #endregion

UIL(界面層)中的代碼:

 cbo_AS_SexID.DataSource = myFRM_TiJianDengJi_MainClient.FRM_TiJianDengJi_Main_cbo_AS_SexID().Tables[0];//綁定性別
            cbo_AS_SexID.DisplayMember = "AttributeDetailsName";
            cbo_AS_SexID.ValueMember = "AttributeDetailsID";
    

數據表格(DataGridView)的界面:


2.9.8(11)

數據庫中的儲存過程(分頁涉及到了該儲存過程):

查詢體檢登記頁面中的病人登記信息
	IF @Type = 'FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu'
	BEGIN  
		--不經處方的病人
			SELECT    RTRIM( BT_StaffTable.StaffName) AS StaffName, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber , RTRIM(BT_PatientTable.PatientName) AS PatientName, 
					  RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsName) AS AttributeDetailsName, RTRIM(BT_PatientTable.AS_SexID) AS AS_SexID,RTRIM(PW_AuxiliaryItemDetailTable.
					  AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, RTRIM(BT_AttributeDetailsTable.AttributeDetailsID) AS AttributeDetailsID, 
					  RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS 體檢登記, RTRIM('無') AS OrdonnanceNumber,RTRIM( BT_PatientTable.PatientID) AS PatientID, 
					  RTRIM(PW_ChargeBillTable.Operator_StaffID) AS TreatmentDoctor_StaffID, RTRIM(0) AS OrdonnanceID, PW_ChargeBillTable.OperateTime AS PrescriptionDate,
					  RTRIM(PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID) AS ChargeBillID
			FROM         PW_AuxiliaryItemDetailTable INNER JOIN
                      BT_PatientTable INNER JOIN
                      BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable_1.AttributeDetailsID ON 
                      PW_AuxiliaryItemDetailTable.OrdonnanceID = BT_PatientTable.PatientID INNER JOIN
                      BT_AttributeDetailsTable ON PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN
                      PW_ItemCategoryTable ON PW_AuxiliaryItemDetailTable.ItemCategoryID = PW_ItemCategoryTable.ItemCategoryID INNER JOIN
                      PW_PhysicalExaminationChargeBillPatientTable ON PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = PW_PhysicalExaminationChargeBillPatientTable.AuxiliaryItemDetailID AND 
                      BT_PatientTable.PatientID = PW_PhysicalExaminationChargeBillPatientTable.PatientID INNER JOIN
                      BT_StaffTable INNER JOIN
                      PW_ChargeBillTable ON BT_StaffTable.StaffID = PW_ChargeBillTable.Operator_StaffID ON PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID = PW_ChargeBillTable.ChargeBillID
			WHERE     (1 = 1) AND (PW_ItemCategoryTable.ItemCategoryID = 1) AND (PW_ChargeBillTable.WhetherOrdonnance = 0) AND (PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0) OR
                      (PW_ItemCategoryTable.ItemCategoryID = 4) AND (PW_ChargeBillTable.WhetherOrdonnance = 0) AND (PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0)   
        UNION   
        --經過處方的病人              
			SELECT    RTRIM(BT_StaffTable.StaffName) AS StaffName, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName,
					  RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS AttributeDetailsName, RTRIM(BT_PatientTable.AS_SexID) AS AS_SexID,RTRIM(PW_AuxiliaryItemDetailTable.
					  AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID,RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsID) AS AttributeDetailsID, 
					  RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsName) AS 體檢登記,RTRIM(PW_OrdonnanceTable.OrdonnanceNumber) AS OrdonnanceNumber,
					  RTRIM(PW_OrdonnanceTable.PatientID) AS PatientID, RTRIM(PW_OrdonnanceTable.TreatmentDoctor_StaffID) AS TreatmentDoctor_StaffID, 
					  RTRIM(PW_AuxiliaryItemDetailTable.OrdonnanceID) AS OrdonnanceID,PW_OrdonnanceTable.PrescriptionDate, RTRIM(0) AS ChargeBillID
			FROM         BT_StaffTable INNER JOIN
                      PW_OrdonnanceTable INNER JOIN
                      BT_AttributeDetailsTable AS BT_AttributeDetailsTable_2 INNER JOIN
                      BT_AttributeDetailsTable INNER JOIN
                      BT_PatientTable ON BT_AttributeDetailsTable.AttributeDetailsID = BT_PatientTable.AS_SexID ON BT_AttributeDetailsTable_2.AttributeDetailsID = BT_PatientTable.AS_InsuredTypeID INNER JOIN
                      BT_MemberCategoryTable ON BT_PatientTable.MemberTypeID = BT_MemberCategoryTable.MemberCategoryID ON PW_OrdonnanceTable.PatientID = BT_PatientTable.PatientID INNER JOIN
                      PW_AuxiliaryItemDetailTable INNER JOIN
                      BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 ON PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID = BT_AttributeDetailsTable_1.AttributeDetailsID INNER JOIN
                      PW_ItemCategoryTable ON PW_AuxiliaryItemDetailTable.ItemCategoryID = PW_ItemCategoryTable.ItemCategoryID ON 
                      PW_OrdonnanceTable.OrdonnanceID = PW_AuxiliaryItemDetailTable.OrdonnanceID ON BT_StaffTable.StaffID = PW_OrdonnanceTable.TreatmentDoctor_StaffID INNER JOIN
                      PW_ChargeBillTable ON PW_OrdonnanceTable.OrdonnanceID = PW_ChargeBillTable.OrdonnanceID 
            WHERE     (1 = 1) AND  PW_ItemCategoryTable.ItemCategoryID = 1 and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 1
	 union  
			SELECT    RTRIM(BT_StaffTable.StaffName) AS StaffName, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, 
                      RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS AttributeDetailsName, RTRIM(BT_PatientTable.AS_SexID) AS AS_SexID, 
                      RTRIM(PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsID)
                       AS AttributeDetailsID,  RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsName) AS 體檢登記, RTRIM(PW_OrdonnanceTable.OrdonnanceNumber) AS OrdonnanceNumber, 
                       RTRIM(PW_OrdonnanceTable.PatientID) AS PatientID, RTRIM(PW_OrdonnanceTable.TreatmentDoctor_StaffID) AS TreatmentDoctor_StaffID, 
                      RTRIM(PW_AuxiliaryItemDetailTable.OrdonnanceID) AS OrdonnanceID, PW_OrdonnanceTable.PrescriptionDate, RTRIM(0) AS ChargeBillID
			FROM         BT_StaffTable INNER JOIN
                      BT_AttributeDetailsTable AS BT_AttributeDetailsTable_2 INNER JOIN
                      BT_PatientTable INNER JOIN
                      BT_AttributeDetailsTable ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN
                      BT_MemberCategoryTable ON BT_PatientTable.MemberTypeID = BT_MemberCategoryTable.MemberCategoryID ON 
                      BT_AttributeDetailsTable_2.AttributeDetailsID = BT_PatientTable.AS_InsuredTypeID INNER JOIN
                      PW_ItemCategoryTable INNER JOIN
                      BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 INNER JOIN
                      PW_AuxiliaryItemDetailTable ON BT_AttributeDetailsTable_1.AttributeDetailsID = PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID ON 
                      PW_ItemCategoryTable.ItemCategoryID = PW_AuxiliaryItemDetailTable.ItemCategoryID INNER JOIN
                      PW_OrdonnanceTable ON PW_AuxiliaryItemDetailTable.OrdonnanceID = PW_OrdonnanceTable.OrdonnanceID ON BT_PatientTable.PatientID = PW_OrdonnanceTable.PatientID ON 
                      BT_StaffTable.StaffID = PW_OrdonnanceTable.TreatmentDoctor_StaffID INNER JOIN
                      PW_ChargeBillTable ON PW_OrdonnanceTable.OrdonnanceID = PW_ChargeBillTable.OrdonnanceID		
              WHERE     (1 = 1) and PW_ItemCategoryTable.ItemCategoryID = 4 and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 1 order by 體檢登記  


BLL(邏輯層)中的方法:

(分頁也涉及了該BLL中的方法)

#region  體檢病人登記信息表格綁定
        [OperationContract]
        public DataSet FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu()
        {
            SqlParameter[] mySqlParameters = {
                                              new SqlParameter("@Type",SqlDbType .Char ), 
                                              };
            mySqlParameters[0].Value = "FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu ";
            DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;
        }
        #endregion

UIL(界面層)中的代碼:

//查詢出來所有的病人信息
            DataTable dtPhysicalExamination = myFRM_TiJianDengJi_MainClient.FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu().Tables[0];
            dgv_PhysicalExaminationRegister.DataSource = dtPhysicalExamination;

UIL中涉及分頁中的界面以及數據表格用到的界面:


2.9.8(12)

按鈕Button中界面:點擊上一頁,數據表格中的數據會顯示出來的是前15條數據的內容,點擊下一頁,數據表格中出現的是下15條中的內容


2.9.8(12)

注意全局變量以及調用BLL

BLL醫院管理系統.TiJianZhongXin.FRM_TiJianDengJi_Main.FRM_TiJianDengJi_MainClient myFRM_TiJianDengJi_MainClient =
            new BLL醫院管理系統.TiJianZhongXin.FRM_TiJianDengJi_Main.FRM_TiJianDengJi_MainClient();
       
        int pageNum = 1;//默認頁號
        int pageSize =15;//默認頁面大小
        int pageMaxNum;//最大頁號
        int intPhysicalExaminationRegisterID = 0; int intOrdonnanceID = 0;
        string strOrdonnanceNumber = ""; int intPatientID = 0;//該病人ID不經過掛號和處方
        int intChargeBillID = 0;//體檢登記病人中的收費單ID(病人ID不經過掛號和處方時用)

UIL中涉及分頁的代碼:

 //點擊上一頁
        private void btn_Next_Click(object sender, EventArgs e)
        {
            if (pageNum > 1)//若不爲首頁
            {
                //頁號-1
                pageNum--;
                this.lblCurrentPage.Text = pageNum.ToString();//當前頁數
                //根據頁號和頁面大小獲取數據
                SkipPage(pageNum, pageSize);//自定義方法用於頁面跳轉
            }
            else
            {
                MessageBox.Show("已經是首頁了!");
            }
        }
        //點擊下一頁
        private void btn_Last_Click(object sender, EventArgs e)
        {
            if (pageNum < pageMaxNum)//若不爲尾頁
            {
                //頁號+1
                pageNum++;
                this.lblCurrentPage.Text = pageNum.ToString();//當前頁數
                //根據頁號和頁面大小獲取數據
                SkipPage(pageNum, pageSize);//自定義方法用於頁面跳轉
            }
            else
            {
                MessageBox.Show("已經是尾頁了!");
            }
        }
  
        void SkipPage(int YeMa,int YeDaXiao)//自定義方法用於頁面跳轉
        {
            //查詢出來所有的病人信息
            DataTable dtPhysicalExamination = myFRM_TiJianDengJi_MainClient.FRM_TiJianDengJi_Main_dgv_PhysicalExaminationRegisterOnYeShu().Tables[0];
            dgv_PhysicalExaminationRegister.DataSource = dtPhysicalExamination;

            DataTable dt = (DataTable)dgv_PhysicalExaminationRegister.DataSource;//把dgv_PhysicalExaminationRegister的數據源轉化爲表的格式賦值給空表
            DataTable ALLPhysicalExaminationMessage = dt.Clone();
            for (int i = (YeMa - 1) * YeDaXiao; i <= dtPhysicalExamination.Rows.Count - 1; i++)//根據傳入頁數的大小和頁碼 遍歷獲取dgv_PhysicalExaminationRegister中的數據,
            {
                if (i == (YeMa - 1) * YeDaXiao + YeDaXiao)//如果獲取的是需要的頁碼和頁大小
                {
                    //就把獲取的頁碼和頁大小綁定到dgv中
                    dgv_PhysicalExaminationRegister.DataSource = ALLPhysicalExaminationMessage;
                    BangDingPriceAndItemCategoryName();//自定義方法綁定現金價格和項目類型的值
                    return;
                }
                DataRow dr = ALLPhysicalExaminationMessage.NewRow();//對空表添加空白行,並進行對應的賦值
                dr["OrdonnanceID"] = dtPhysicalExamination.Rows[i]["OrdonnanceID"];
                dr["OrdonnanceNumber"] = dtPhysicalExamination.Rows[i]["OrdonnanceNumber"];
                dr["PatientID"] = dtPhysicalExamination.Rows[i]["PatientID"];
                dr["TreatmentDoctor_StaffID"] = dtPhysicalExamination.Rows[i]["TreatmentDoctor_StaffID"];
                dr["StaffName"] = dtPhysicalExamination.Rows[i]["StaffName"];
                dr["PatientCardNumber"] = dtPhysicalExamination.Rows[i]["PatientCardNumber"];
                dr["PatientName"] = dtPhysicalExamination.Rows[i]["PatientName"];
                dr["AttributeDetailsName"] = dtPhysicalExamination.Rows[i]["AttributeDetailsName"];
                dr["AS_SexID"] = dtPhysicalExamination.Rows[i]["AS_SexID"];
                dr["AS_PhysicalExaminationRegisterID"] = dtPhysicalExamination.Rows[i]["AS_PhysicalExaminationRegisterID"];
                dr["體檢登記"] = dtPhysicalExamination.Rows[i]["體檢登記"];
                dr["PrescriptionDate"] = dtPhysicalExamination.Rows[i]["PrescriptionDate"];
                dr["ChargeBillID"] = dtPhysicalExamination.Rows[i]["ChargeBillID"];
                ALLPhysicalExaminationMessage.Rows.Add(dr);//把空白行添加到空表中去

            }        
            //這裏就把獲取的最後頁碼和最後一個頁大小綁定到dgv中
            dgv_PhysicalExaminationRegister.DataSource = ALLPhysicalExaminationMessage;
            BangDingPriceAndItemCategoryName();////自定義方法綁定現金價格和項目類型的值
        }

病人體檢的項目價格進行累加以及病人體檢的項目進行分類(該分類並沒有在數據庫中進行詳細的分類)所以在界面上自定義方法進行分類:代碼如下:

 

void BangDingPriceAndItemCategoryName()//自定義方法綁定現金價格個項目類型的值
        {
            DataTable dt = new DataTable();
            for (int i = 0; i < dgv_PhysicalExaminationRegister.Rows.Count; i++)//遍歷循環體檢病人信息
            {
                int intSelect = 0; decimal decProjectPrice = 0; string strItemCategoryName = "";
                int intChuFangID = Convert.ToInt32(dgv_PhysicalExaminationRegister.Rows[i].Cells["處方單ID"].Value);//獲取每一個病人的處方ID
                if (intChuFangID != 0)
                {   
                     dt = myFRM_TiJianDengJi_MainClient.FRM_TiJianDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID(intChuFangID).Tables[0];//把每個病人的體檢項目查詢出來
                }
                else
                {
                    int intBingRenID = Convert.ToInt32(dgv_PhysicalExaminationRegister.Rows[i].Cells["病人ID"].Value);
                    int intChargeBillID = Convert.ToInt32(dgv_PhysicalExaminationRegister.Rows[i].Cells["收費單ID"].Value);
                    dt = myFRM_TiJianDengJi_MainClient.FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID_OtherCharge(intBingRenID, intChargeBillID).Tables[0];//把每個病人的體檢項目查詢出來
                }
                for (int k = 0; k < dt.Rows.Count; k++)//遍歷病人體檢的項目表
                {
                    if (Convert.ToInt32(dt.Rows[k]["ItemCategoryID"]) == 4)//如果病人體檢項目類型ID = 4
                    {
                        intSelect++;//變量累加
                        strItemCategoryName = dt.Rows[k]["ItemCategoryName"].ToString().Trim();//獲取體檢項目類型
                    }
                    else if (Convert.ToInt32(dt.Rows[k]["ItemCategoryID"]) == 1)//如果病人體檢項目類型ID = 1
                    {
                        strItemCategoryName = dt.Rows[k]["ItemCategoryName"].ToString().Trim();//獲取體檢項目類型
                    }
                    decProjectPrice += Convert.ToDecimal(dt.Rows[k]["ProjectPrice"]);//累加每一個項目的現金價格
                }
                dgv_PhysicalExaminationRegister.Rows[i].Cells["現金價格"].Value = decProjectPrice;//把某個病人總的項目的現金價格賦值給病人
                if (intSelect == dt.Rows.Count)//如果體檢項目類型ID = 4 的變量累加的結果等於該病人的體檢項目的總數
                {
                    dgv_PhysicalExaminationRegister.Rows[i].Cells["項目類型"].Value = strItemCategoryName;//那麼這個病人的體檢項目的類型全部堵是一樣的
                }
                if (intSelect < dt.Rows.Count && intSelect > 0)//如果體檢項目類型ID = 4 的變量累加的結果小於該病人的體檢項目的總數,並且變量不等於0,說明體檢項目中類型不一樣
                {
                    dgv_PhysicalExaminationRegister.Rows[i].Cells["項目類型"].Value = "項目+ 體檢套餐";
                }
                else if (intSelect == 0)//如果體檢項目類型ID = 4 的變量爲0說明該病人的體檢項目類型爲全部爲另一種情況
                {
                    dgv_PhysicalExaminationRegister.Rows[i].Cells["項目類型"].Value = strItemCategoryName;
                }
            }
        }

 

但是該方法有一個不足之處就是,必須在窗體第一次加載時才能運行正常,否則就算執行該代碼,既不會提示報錯,也不會正常運行。只有在這個事件上調用該方法,就能解決這個不足之處:

點擊窗體,右鍵屬性,點擊下圖中的閃電符號,選擇窗體第一次顯示時發生的事件,如下圖:


2.9.8(13)

點擊進去後,在裏面寫調用的代碼就可以了

//窗體第一次顯示時發生
        private void FRM_TiJianDengJi_Main_Shown(object sender, EventArgs e)
        {
            BangDingPriceAndItemCategoryName();//自定義方法綁定現金價格個項目類型的值
        }

根據病人姓名或者病人卡號的文本框輸入的值進行查詢對應的病人信息 如下圖:


2.9.8(14)

數據庫中的儲存過程爲:

--根據病人姓名或者病人卡號進行查詢對應的病人信息
	IF @Type = 'FRM_TiJianDengJi_Main_dgvSetMealDetailMessageOnPainentNameOrNumber'
	BEGIN	
	--不經過處方
			SELECT     BT_StaffTable.StaffName, BT_PatientTable.PatientCardNumber, BT_PatientTable.PatientName, BT_AttributeDetailsTable_1.AttributeDetailsName, BT_PatientTable.AS_SexID, 
                      PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID, BT_AttributeDetailsTable.AttributeDetailsID, RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS 體檢登記, RTRIM('無') 
                      AS OrdonnanceNumber, BT_PatientTable.PatientID, RTRIM(PW_ChargeBillTable.Operator_StaffID) AS TreatmentDoctor_StaffID, RTRIM(0) AS OrdonnanceID, 
                      PW_ChargeBillTable.OperateTime AS PrescriptionDate, PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID
			FROM         PW_AuxiliaryItemDetailTable INNER JOIN
                      BT_PatientTable INNER JOIN
                      BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable_1.AttributeDetailsID ON 
                      PW_AuxiliaryItemDetailTable.OrdonnanceID = BT_PatientTable.PatientID INNER JOIN
                      BT_AttributeDetailsTable ON PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN
                      PW_ItemCategoryTable ON PW_AuxiliaryItemDetailTable.ItemCategoryID = PW_ItemCategoryTable.ItemCategoryID INNER JOIN
                      PW_PhysicalExaminationChargeBillPatientTable ON PW_AuxiliaryItemDetailTable.AuxiliaryItemDetailID = PW_PhysicalExaminationChargeBillPatientTable.AuxiliaryItemDetailID AND 
                      BT_PatientTable.PatientID = PW_PhysicalExaminationChargeBillPatientTable.PatientID INNER JOIN
                      BT_StaffTable INNER JOIN
                      PW_ChargeBillTable ON BT_StaffTable.StaffID = PW_ChargeBillTable.Operator_StaffID ON PW_PhysicalExaminationChargeBillPatientTable.ChargeBillID = PW_ChargeBillTable.ChargeBillID
			WHERE     (1 = 1) AND (PW_ItemCategoryTable.ItemCategoryID = 1) AND (PW_ChargeBillTable.WhetherOrdonnance = 0) AND (PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0) AND
				      BT_PatientTable.PatientName LIKE +'%'+RTRIM(LTRIM(@PatientNameOrNumber)) + '%'OR  (PW_ItemCategoryTable.ItemCategoryID = 1) AND (PW_ChargeBillTable.WhetherOrdonnance = 0) 
				      AND (PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0) AND  BT_PatientTable.PatientCardNumber LIKE + '%'+RTRIM(LTRIM(@PatientNameOrNumber)) +'%' OR
                      (PW_ItemCategoryTable.ItemCategoryID = 4) AND (PW_ChargeBillTable.WhetherOrdonnance = 0) AND (PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0)   
				      AND BT_PatientTable.PatientName LIKE +'%'+RTRIM(LTRIM(@PatientNameOrNumber)) + '%'OR  (PW_ItemCategoryTable.ItemCategoryID = 4) AND (PW_ChargeBillTable.WhetherOrdonnance = 0) 
				      AND (PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 0)    AND BT_PatientTable.PatientCardNumber LIKE + '%'+RTRIM(LTRIM(@PatientNameOrNumber)) +'%' 
	--經過處方
        UNION                  
			SELECT     BT_StaffTable.StaffName, BT_PatientTable.PatientCardNumber, BT_PatientTable.PatientName, BT_AttributeDetailsTable.AttributeDetailsName, BT_PatientTable.AS_SexID, 
                      PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID, BT_AttributeDetailsTable_1.AttributeDetailsID, BT_AttributeDetailsTable_1.AttributeDetailsName AS 體檢登記, 
                      PW_OrdonnanceTable.OrdonnanceNumber, PW_OrdonnanceTable.PatientID, PW_OrdonnanceTable.TreatmentDoctor_StaffID, PW_AuxiliaryItemDetailTable.OrdonnanceID, 
                      PW_OrdonnanceTable.PrescriptionDate, RTRIM(0) AS ChargeBillID
			FROM         BT_StaffTable INNER JOIN
                      PW_OrdonnanceTable INNER JOIN
                      BT_AttributeDetailsTable AS BT_AttributeDetailsTable_2 INNER JOIN
                      BT_AttributeDetailsTable INNER JOIN
                      BT_PatientTable ON BT_AttributeDetailsTable.AttributeDetailsID = BT_PatientTable.AS_SexID ON BT_AttributeDetailsTable_2.AttributeDetailsID = BT_PatientTable.AS_InsuredTypeID INNER JOIN
                      BT_MemberCategoryTable ON BT_PatientTable.MemberTypeID = BT_MemberCategoryTable.MemberCategoryID ON PW_OrdonnanceTable.PatientID = BT_PatientTable.PatientID INNER JOIN
                      PW_AuxiliaryItemDetailTable INNER JOIN
                      BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 ON PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID = BT_AttributeDetailsTable_1.AttributeDetailsID INNER JOIN
                      PW_ItemCategoryTable ON PW_AuxiliaryItemDetailTable.ItemCategoryID = PW_ItemCategoryTable.ItemCategoryID ON 
                      PW_OrdonnanceTable.OrdonnanceID = PW_AuxiliaryItemDetailTable.OrdonnanceID ON BT_StaffTable.StaffID = PW_OrdonnanceTable.TreatmentDoctor_StaffID INNER JOIN
                      PW_ChargeBillTable ON PW_OrdonnanceTable.OrdonnanceID = PW_ChargeBillTable.OrdonnanceID  
       WHERE     (1 = 1) AND  PW_ItemCategoryTable.ItemCategoryID = 1 AND BT_PatientTable.PatientName LIKE +'%'+RTRIM(LTRIM(@PatientNameOrNumber)) + '%' and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 1 OR 
			 PW_ItemCategoryTable.ItemCategoryID = 1 AND BT_PatientTable.PatientCardNumber LIKE + '%'+RTRIM(LTRIM(@PatientNameOrNumber)) +'%' and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 1 
	 union  
			SELECT     RTRIM(BT_StaffTable.StaffName) AS StaffName, RTRIM(BT_PatientTable.PatientCardNumber) AS PatientCardNumber, RTRIM(BT_PatientTable.PatientName) AS PatientName, 
                      RTRIM(BT_AttributeDetailsTable.AttributeDetailsName) AS AttributeDetailsName, RTRIM(BT_PatientTable.AS_SexID) AS AS_SexID, 
                      RTRIM(PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID) AS AS_PhysicalExaminationRegisterID, RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsID) AS AttributeDetailsID, 
                      RTRIM(BT_AttributeDetailsTable_1.AttributeDetailsName) AS 體檢登記, PW_OrdonnanceTable.OrdonnanceNumber, PW_OrdonnanceTable.PatientID, PW_OrdonnanceTable.TreatmentDoctor_StaffID, 
                      PW_AuxiliaryItemDetailTable.OrdonnanceID, PW_OrdonnanceTable.PrescriptionDate, RTRIM(0) AS ChargeBillID
			FROM         BT_StaffTable INNER JOIN
                      BT_AttributeDetailsTable AS BT_AttributeDetailsTable_2 INNER JOIN
                      BT_PatientTable INNER JOIN
                      BT_AttributeDetailsTable ON BT_PatientTable.AS_SexID = BT_AttributeDetailsTable.AttributeDetailsID INNER JOIN
                      BT_MemberCategoryTable ON BT_PatientTable.MemberTypeID = BT_MemberCategoryTable.MemberCategoryID ON 
                      BT_AttributeDetailsTable_2.AttributeDetailsID = BT_PatientTable.AS_InsuredTypeID INNER JOIN
                      PW_ItemCategoryTable INNER JOIN
                      BT_AttributeDetailsTable AS BT_AttributeDetailsTable_1 INNER JOIN
                      PW_AuxiliaryItemDetailTable ON BT_AttributeDetailsTable_1.AttributeDetailsID = PW_AuxiliaryItemDetailTable.AS_PhysicalExaminationRegisterID ON 
                      PW_ItemCategoryTable.ItemCategoryID = PW_AuxiliaryItemDetailTable.ItemCategoryID INNER JOIN
                      PW_OrdonnanceTable ON PW_AuxiliaryItemDetailTable.OrdonnanceID = PW_OrdonnanceTable.OrdonnanceID ON BT_PatientTable.PatientID = PW_OrdonnanceTable.PatientID ON 
                      BT_StaffTable.StaffID = PW_OrdonnanceTable.TreatmentDoctor_StaffID INNER JOIN
                      PW_ChargeBillTable ON PW_OrdonnanceTable.OrdonnanceID = PW_ChargeBillTable.OrdonnanceID		
             WHERE     (1 = 1) AND  PW_ItemCategoryTable.ItemCategoryID = 4 AND BT_PatientTable.PatientName LIKE +'%'+RTRIM(LTRIM(@PatientNameOrNumber)) + '%' and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 1 OR 
			 PW_ItemCategoryTable.ItemCategoryID = 4 AND BT_PatientTable.PatientCardNumber LIKE + '%'+RTRIM(LTRIM(@PatientNameOrNumber)) +'%'and PW_AuxiliaryItemDetailTable.WhetherOrdonnance = 1 order by 體檢登記 , PatientName
	                      
       END


BLL中的方法:

//根據病人姓名或者病人卡號進行查詢對應的病人信息
        [OperationContract]
        public DataSet FRM_TiJianDengJi_Main_dgvSetMealDetailMessageOnPainentNameOrNumber(string strPatientNameOrNumber)
        {
            SqlParameter[] mySqlParameters = {
                                              new SqlParameter("@Type",SqlDbType .Char ),
                                              new SqlParameter ("@PatientNameOrNumber",SqlDbType .Char  ),
                                     
                                              };
            mySqlParameters[0].Value = "FRM_TiJianDengJi_Main_dgvSetMealDetailMessageOnPainentNameOrNumber ";
            mySqlParameters[1].Value = strPatientNameOrNumber;
            DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_TiJianDengJi_Main", mySqlParameters);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;
        }

UIL中的代碼:

//點擊查詢
        private void btn_Inqure_Click(object sender, EventArgs e)
        {
            string strPatientCardNumberOrName = txt_PatientCardNumberOrName.Text.ToString().Trim();
            dgv_PhysicalExaminationRegister.AutoGenerateColumns = false ;//dgv列不可改變
            dgv_PhysicalExaminationRegister.DataSource = myFRM_TiJianDengJi_MainClient.FRM_TiJianDengJi_Main_dgvSetMealDetailMessageOnPainentNameOrNumber(strPatientCardNumberOrName).Tables[0];
            BangDingPriceAndItemCategoryName();//自定義方法綁定現金價格個項目類型的值
        }


運行界面小功能解析:


2.9.8(15)

DataGridView表格中的數據部分顏色改變以及dgv點擊單元格顯示數據:

第一步:點擊dgv數據表格,右鍵數組屬性, .找到DGV對應的點擊任意單元格是發生、需要設置單元格內容顯示格式時發生屬性事件 如下圖


2.9.8(16)

第二步:編寫代碼

代碼如下:

//dgv單元格點擊顯示數據
        private void dgv_PhysicalExaminationRegister_CellClick(object sender, DataGridViewCellEventArgs e)
        { 
            intPhysicalExaminationRegisterID = Convert.ToInt32(dgv_PhysicalExaminationRegister.CurrentRow.Cells["體檢登記ID"].Value);
            txt_PatientName.Text = dgv_PhysicalExaminationRegister.CurrentRow.Cells["病人姓名"].Value.ToString().Trim();
            txt_PatientCardNumber.Text = dgv_PhysicalExaminationRegister.CurrentRow.Cells["病人卡號"].Value.ToString().Trim();
            intOrdonnanceID = Convert.ToInt32(dgv_PhysicalExaminationRegister.CurrentRow.Cells["處方單ID"].Value);
            strOrdonnanceNumber = dgv_PhysicalExaminationRegister.CurrentRow.Cells["處方單號"].Value.ToString().Trim();
            intPatientID = Convert.ToInt32(dgv_PhysicalExaminationRegister.CurrentRow.Cells["病人ID"].Value);
            txt_RegisterNumber.Text = dgv_PhysicalExaminationRegister.CurrentRow.Cells["處方單號"].Value.ToString().Trim();
            cbo_AS_SexID.SelectedValue = Convert.ToInt32(dgv_PhysicalExaminationRegister.CurrentRow.Cells["性別ID"].Value);
            cbo_Doctor_StaffID.SelectedValue = Convert.ToInt32(dgv_PhysicalExaminationRegister.CurrentRow.Cells["醫生ID"].Value);
            intChargeBillID = Convert.ToInt32(dgv_PhysicalExaminationRegister.CurrentRow.Cells["收費單ID"].Value);
            if (intOrdonnanceID == 0)//如果處方ID爲空,即說明該病人不經過處方,而只是體檢(即在體檢中心登記的) 查找該病人的體檢項目
            {
               dgv_SetMealDetailMessage.DataSource = myFRM_TiJianDengJi_MainClient.FRM_QianTaoShouFei_dgv_SetMealDetailMessageOnItemCategoryID_OtherCharge(intPatientID, intChargeBillID).Tables[0];
            }
            else
            {
                //如果處方ID不爲空,即說明該病人經過處方,單擊處方單,獲取該處方單下的體檢項目
                dgv_SetMealDetailMessage.DataSource = myFRM_TiJianDengJi_MainClient.FRM_TiJianDengJi_Main_dgv_SetMealDetailMessageOnItemCategoryID(intOrdonnanceID).Tables[0];
            }
        }

        #region dgv中單元格內容顯示格式事件
        private void dgv_PhysicalExaminationRegister_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            //遍歷dgv中的行
            for (int i = 0; i < dgv_PhysicalExaminationRegister.Rows.Count; i++)
            {
                //如果dgv中的行的單元格體檢狀態的值爲 == 爲“未登記“
                if (dgv_PhysicalExaminationRegister.Rows[i].Cells["體檢狀態"].Value.ToString().Trim() == "未登記")
                {
                    //那麼該單元格體檢狀態的前景色爲紅色
                    this.dgv_PhysicalExaminationRegister.Rows[i].Cells["體檢狀態"].Style.ForeColor = Color.Red;
                }
                //又如果dgv中的單元格體檢狀態的值爲 == 爲”登記未執行“
                else if (dgv_PhysicalExaminationRegister.Rows[i].Cells["體檢狀態"].Value.ToString().Trim() == "登記未執行")
                {
                    //那麼該但單元格體檢狀態的前景色爲藍色
                    this.dgv_PhysicalExaminationRegister.Rows[i].Cells["體檢狀態"].Style.ForeColor = Color.Blue;
                }
                else
                {
                    //那麼該但單元格體檢狀態的前景色爲棕紅色
                    this.dgv_PhysicalExaminationRegister.Rows[i].Cells["體檢狀態"].Style.ForeColor = Color.DarkRed;
                }
                dgv_PhysicalExaminationRegister.Rows[i].Cells["現金價格"].Style.ForeColor = Color.Red;
            }         
        }
        #endregion
        //設置單元格內容顯示格式時發生
        private void dgv_SetMealDetailMessage_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            //體檢套餐明細中的現金價格中的值的前景色爲紅色
            for (int k = 0; k < dgv_SetMealDetailMessage.Rows.Count; k++)
            {
                dgv_SetMealDetailMessage.Rows[k].Cells["現金價格1"].Style.ForeColor = Color.Red;
            }
        }

僅供學習,禁止用於商業用途,否則後果自負







    





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章