前文《EFW框架Winform前端開發之強大的自定義控件庫》中咱們介紹了EFW框架中Winform系統中的自定義控件,本章使用自定義控件中的GridBoxCard控件開發了一個HIS系統的處方錄入控件。作過HIS系統的都知道醫生站系統是整個醫院系統中比較複雜的模塊,而處方錄入又是醫生站系統中最複雜的功能;處方控件就是把醫生的紙質處方轉換爲電子處方,處方有關的數據源包括藥品、項目、材料、用法、頻次、囑託等;處方控件功能包括新開、修改、換方、合租、刪除等,還有其餘功能看下圖;php
在代碼中使用處方控件分爲三步,首先建表,由於控件的使用依賴一些數據源,固然若是你的系統中已經有一套控件須要的表,那麼建表這步能夠省略;接着將控件拖入form界面上並設置相關屬性;而後實現控件的接口IPrescripttionDbHelper;html
1)控件依賴的表有以下,表的結構能夠看實例中的腳本前端
2)界面上拖入處方控件並設置屬性sql
3)TestPrescripttionDbHelper對象繼承接口IPrescripttionDbHelper,並實現接口方法app
TestPrescripttionDbHelper presHelper = new TestPrescripttionDbHelper(); prescriptionControl1.InitDbHelper(presHelper); prescriptionControl1.LoadPatData(1, 101, "兒科", 201, "李醫生");
public class TestPrescripttionDbHelper : IPrescripttionDbHelper { private AbstractDatabase oleDb; public TestPrescripttionDbHelper() { oleDb = FactoryDatabase.GetDatabase(); } #region IPrescripttionDbHelper 成員 private List<CardDataSourceDrugItem> GetDrugItemToDatabase(int type, int pageNo, int pageSize, string filter) { PageInfo page = new PageInfo(pageSize, pageNo); page.KeyName = "StockID"; string strsql = ""; strsql = @"SELECT * FROM ViewBaseData_Med T WHERE (PyCode LIKE '%{0}%' OR PyCodeT LIKE '%{0}%' OR WbCode LIKE '%{0}%' OR WbCodeT LIKE '%{0}%' OR CName LIKE '%{0}%' OR TName LIKE '%{0}%')"; strsql = string.Format(strsql, filter); strsql = SqlPage.FormatSql(strsql, page, oleDb); DataTable dt = oleDb.GetDataTable(strsql); List<CardDataSourceDrugItem> list_DrugItem = new List<CardDataSourceDrugItem>(); for (int i = 0; i < dt.Rows.Count; i++) { CardDataSourceDrugItem mDrugItem = new CardDataSourceDrugItem(); mDrugItem.ItemId = ConvertDataExtend.ToInt32(dt.Rows[i]["StockID"], 0); mDrugItem.ItemName = dt.Rows[i]["CName"].ToString(); mDrugItem.ItemName_Print = dt.Rows[i]["TName"].ToString(); mDrugItem.Standard = dt.Rows[i]["Spec"].ToString(); mDrugItem.Scale = "";//補償比例 mDrugItem.StoreNum = ConvertDataExtend.ToDecimal(dt.Rows[i]["ActualQty"], 0);//庫存量 mDrugItem.UnPickUnit = dt.Rows[i]["MiniUnit"].ToString();//包裝單位(銷售單位) mDrugItem.SellPrice = ConvertDataExtend.ToDecimal(dt.Rows[i]["ClinPrice"], 0);//銷售價格? mDrugItem.BuyPrice = ConvertDataExtend.ToDecimal(dt.Rows[i]["WardPrice"], 0);//進價 //mDrugItem.ExecDeptName = dt.Rows[i][""].ToString();//執行科室? mDrugItem.Pym = dt.Rows[i]["PyCode"].ToString(); mDrugItem.Wbm = dt.Rows[i]["WbCode"].ToString(); mDrugItem.Address = dt.Rows[i]["FacName"].ToString();//生產廠家 //mDrugItem.DoseUnitId = dt.Rows[i][""].ToString();//劑量單位 mDrugItem.DoseUnitName = dt.Rows[i]["DosUnit"].ToString(); mDrugItem.DoseConvertNum = ConvertDataExtend.ToDecimal(dt.Rows[i]["Dosage"], 0);//劑量對應包裝單位係數 mDrugItem.ItemType = ConvertDataExtend.ToInt32(dt.Rows[i]["MatClass"], 0);//項目類型 0-全部 1-西藥 2-中藥 3-處方可開的物品 4-收費項目 //mDrugItem.StatItemCode = dt.Rows[i][""].ToString();//大項目代碼 //mDrugItem.UnPickUnitId = dt.Rows[i][""].ToString();//包裝單位ID mDrugItem.ExecDeptId = ConvertDataExtend.ToInt32(dt.Rows[i]["DeptID"], 0);//執行科室ID? mDrugItem.FloatFlag = ConvertDataExtend.ToInt32(dt.Rows[i]["RoundingMode"], 0);// dt.Rows[i][""].ToString();//按含量取整1 按劑量取整0 //mDrugItem.VirulentFlag = dt.Rows[i][""].ToString();//劇毒標識 //mDrugItem.NarcoticFlag = dt.Rows[i][""].ToString();//麻醉標識 mDrugItem.SkinTestFlag = ConvertDataExtend.ToInt32(dt.Rows[i]["SkinMethod"], 0);//皮試標識 //mDrugItem.RecipeFlag = dt.Rows[i][""].ToString();//處方標識 //mDrugItem.LunacyFlag = dt.Rows[i][""].ToString();//精神藥品標識 //mDrugItem.CostlyFlag = dt.Rows[i][""].ToString();//貴重藥品標識 mDrugItem.default_Usage_Amount = 0;//默認用量 mDrugItem.default_Usage_Id = 0;//默認用法 mDrugItem.default_Usage_Name = ""; mDrugItem.default_Frequency_Id = 0;//默認頻次 mDrugItem.default_Frequency_Name = ""; list_DrugItem.Add(mDrugItem); } return list_DrugItem; } public List<CardDataSourceDrugItem> GetDrugItem(int type, int pageNo, int pageSize, string filter) { return GetDrugItemToDatabase(type, pageNo, pageSize, filter); } public CardDataSourceDrugItem GetDrugItem(int ItemId) { string strsql = @"SELECT TOP 1* FROM ViewBaseData_Med T WHERE StockID={0}"; strsql = string.Format(strsql, ItemId); DataTable dt = oleDb.GetDataTable(strsql); List<CardDataSourceDrugItem> list_DrugItem = new List<CardDataSourceDrugItem>(); for (int i = 0; i < dt.Rows.Count; i++) { CardDataSourceDrugItem mDrugItem = new CardDataSourceDrugItem(); mDrugItem.ItemId = ConvertDataExtend.ToInt32(dt.Rows[i]["StockID"], 0); mDrugItem.ItemName = dt.Rows[i]["CName"].ToString(); mDrugItem.ItemName_Print = dt.Rows[i]["TName"].ToString(); mDrugItem.Standard = dt.Rows[i]["Spec"].ToString(); mDrugItem.Scale = "";//補償比例 mDrugItem.StoreNum = ConvertDataExtend.ToDecimal(dt.Rows[i]["ActualQty"], 0);//庫存量 mDrugItem.UnPickUnit = dt.Rows[i]["MiniUnit"].ToString();//包裝單位(銷售單位) mDrugItem.SellPrice = ConvertDataExtend.ToDecimal(dt.Rows[i]["ClinPrice"], 0);//銷售價格? mDrugItem.BuyPrice = ConvertDataExtend.ToDecimal(dt.Rows[i]["WardPrice"], 0);//進價 //mDrugItem.ExecDeptName = dt.Rows[i][""].ToString();//執行科室? mDrugItem.Pym = dt.Rows[i]["PyCode"].ToString(); mDrugItem.Wbm = dt.Rows[i]["WbCode"].ToString(); mDrugItem.Address = dt.Rows[i]["FacName"].ToString();//生產廠家 //mDrugItem.DoseUnitId = dt.Rows[i][""].ToString();//劑量單位 mDrugItem.DoseUnitName = dt.Rows[i]["DosUnit"].ToString(); mDrugItem.DoseConvertNum = ConvertDataExtend.ToDecimal(dt.Rows[i]["Dosage"], 0);//劑量對應包裝單位係數 mDrugItem.ItemType = ConvertDataExtend.ToInt32(dt.Rows[i]["MatClass"], 0);//項目類型 0-全部 1-西藥 2-中藥 3-處方可開的物品 4-收費項目 //mDrugItem.StatItemCode = dt.Rows[i][""].ToString();//大項目代碼 //mDrugItem.UnPickUnitId = dt.Rows[i][""].ToString();//包裝單位ID mDrugItem.ExecDeptId = ConvertDataExtend.ToInt32(dt.Rows[i]["DeptID"], 0);//執行科室ID? mDrugItem.FloatFlag = ConvertDataExtend.ToInt32(dt.Rows[i]["RoundingMode"], 0);// dt.Rows[i][""].ToString();//按含量取整1 按劑量取整0 //mDrugItem.VirulentFlag = dt.Rows[i][""].ToString();//劇毒標識 //mDrugItem.NarcoticFlag = dt.Rows[i][""].ToString();//麻醉標識 mDrugItem.SkinTestFlag = ConvertDataExtend.ToInt32(dt.Rows[i]["SkinMethod"], 0);//皮試標識 //mDrugItem.RecipeFlag = dt.Rows[i][""].ToString();//處方標識 //mDrugItem.LunacyFlag = dt.Rows[i][""].ToString();//精神藥品標識 //mDrugItem.CostlyFlag = dt.Rows[i][""].ToString();//貴重藥品標識 mDrugItem.default_Usage_Amount = 0;//默認用量 mDrugItem.default_Usage_Id = 0;//默認用法 mDrugItem.default_Usage_Name = ""; mDrugItem.default_Frequency_Id = 0;//默認頻次 mDrugItem.default_Frequency_Name = ""; list_DrugItem.Add(mDrugItem); } return list_DrugItem.Count > 0 ? list_DrugItem[0] : null; } public List<CardDataSourceUsage> GetUsage() { string strsql = @"SELECT ID,ChannelName,CName,EName,PYCode,WBCode,InputCode FROM Clinic_Channel WHERE DeleteFlag=0 ORDER BY OrderNum"; DataTable dt = oleDb.GetDataTable(strsql); List<CardDataSourceUsage> list_Usage = new List<CardDataSourceUsage>(); for (int i = 0; i < dt.Rows.Count; i++) { CardDataSourceUsage mUsage = new CardDataSourceUsage(); mUsage.UsageId = ConvertDataExtend.ToInt32(dt.Rows[i]["ID"], 0); mUsage.UsageName = dt.Rows[i]["ChannelName"].ToString(); mUsage.Pym = dt.Rows[i]["PYCode"].ToString(); mUsage.Wbm = dt.Rows[i]["WBCode"].ToString(); //mUsage.Szm = dt.Rows[i]["ID"].ToString(); list_Usage.Add(mUsage); } return list_Usage; } public List<CardDataSourceFrequency> GetFrequency() { string strsql = @"SELECT ID,FrequencyName,CName,EName,NumCode,InputCode,ExecuteCode,DeleteFlag,PYCode,WBCode FROM Clinic_Frequency WHERE DeleteFlag = 0 ORDER BY OrderNum"; DataTable dt = oleDb.GetDataTable(strsql); List<CardDataSourceFrequency> list_Frequency = new List<CardDataSourceFrequency>(); for (int i = 0; i < dt.Rows.Count; i++) { CardDataSourceFrequency mFrequency = new CardDataSourceFrequency(); mFrequency.FrequencyId = Convert.ToInt32(dt.Rows[i]["ID"]); mFrequency.Name = dt.Rows[i]["FrequencyName"].ToString(); mFrequency.Caption = dt.Rows[i]["ExecuteCode"].ToString(); int _execNum, _cycleDay; CardDataSourceFrequency.Calculate(mFrequency.Caption, out _execNum, out _cycleDay); mFrequency.ExecNum = _execNum;//執行次數 mFrequency.CycleDay = _cycleDay;//執行週期 mFrequency.Pym = dt.Rows[i]["InputCode"].ToString(); mFrequency.Wbm = dt.Rows[i]["InputCode"].ToString(); mFrequency.Szm = dt.Rows[i]["NumCode"].ToString(); list_Frequency.Add(mFrequency); } return list_Frequency; } public List<CardDataSourceEntrust> GetEntrust() { string strsql = @"SELECT ID, DeptCode,HelpCode, MsgContent,Uploader,WBCode,PYCode FROM Clinic_Memo "; DataTable dt = oleDb.GetDataTable(strsql); List<CardDataSourceEntrust> list_entrust = new List<CardDataSourceEntrust>(); for (int i = 0; i < dt.Rows.Count; i++) { CardDataSourceEntrust mentrust = new CardDataSourceEntrust(); mentrust.Id = Convert.ToInt32(dt.Rows[i]["ID"]); mentrust.Name = dt.Rows[i]["MsgContent"].ToString(); mentrust.Pym = dt.Rows[i]["PYCode"].ToString(); mentrust.Wbm = dt.Rows[i]["WBCode"].ToString(); mentrust.Szm = ""; list_entrust.Add(mentrust); } return list_entrust; } public List<CardDataSourceUnit> GetUnit(int stockId, int type) { DataTable dt = oleDb.GetDataTable("xpGetDrugUnit", stockId, type); List<CardDataSourceUnit> list_unit = new List<CardDataSourceUnit>(); for (int i = 0; i < dt.Rows.Count; i++) { CardDataSourceUnit munit = new CardDataSourceUnit(); munit.UnitDicId = 0; munit.UnitName = dt.Rows[i]["UnitName"].ToString(); munit.Pym = ""; munit.Wbm = ""; munit.Factor = Convert.ToDecimal(dt.Rows[i]["UnitFactor"]); list_unit.Add(munit); } return list_unit; } public List<Prescription> GetPresTemplate(int type, int tplId) { string strsql = ""; strsql = @"SELECT TOP 100 A.GroupID, A.FeeID,A.FeeName,A.FeeClass, A.Dosage,A.DosageUnit, A.Amount,A.Unit, A.FrequencyID,C.FrequencyName AS FrequencyName,C.ExecuteCode, A.ChannelID,B.CName AS ChannelName, A.Days Num, A.Days,A.Memo ,D.ClinPrice,D.Spec,D.Dosage DoseConvertNum,D.MatClass,D.SkinMethod IsAst FROM Clinic_SetMealDetail A LEFT JOIN Clinic_Channel B ON A.ChannelID = B.ID LEFT JOIN Clinic_Frequency C ON A.FrequencyID = C.ID LEFT JOIN ViewBaseData_Med D ON A.FeeID=D.StockID WHERE ListID = {0} ORDER BY A.GroupID,A.OrderNum"; strsql = string.Format(strsql, tplId); DataTable dt = oleDb.GetDataTable(strsql); List<Prescription> list_Prescription = new List<Prescription>(); for (int i = 0; i < dt.Rows.Count; i++) { Prescription mPres = new Prescription(); mPres.PresListId = 0; mPres.PresHeadId = 0; //mPres.OrderNo = i + 1;//行號 mPres.Item_Id = Convert.ToInt32(dt.Rows[i]["FeeID"]); mPres.Item_Name = dt.Rows[i]["FeeName"].ToString(); mPres.Item_Type = type;//1西藥 2中藥 3項目材料 mPres.StatItem_Code = ""; mPres.Sell_Price = ConvertDataExtend.ToDecimal(dt.Rows[i]["ClinPrice"], 0); mPres.Buy_Price = ConvertDataExtend.ToDecimal(dt.Rows[i]["ClinPrice"], 0); mPres.Item_Price = ConvertDataExtend.ToDecimal(dt.Rows[i]["ClinPrice"], 0); mPres.Standard = dt.Rows[i]["Spec"].ToString(); mPres.Usage_Amount = Convert.ToDecimal(dt.Rows[i]["Dosage"]);//劑量 mPres.Usage_Unit = dt.Rows[i]["DosageUnit"].ToString();//劑量單位 mPres.Usage_Rate = ConvertDataExtend.ToDecimal(dt.Rows[i]["DoseConvertNum"], 1);//劑量係數 mPres.Dosage = Convert.ToInt32(dt.Rows[i]["Num"]);//付數 mPres.Usage_Id = Convert.ToInt32(dt.Rows[i]["ChannelID"]); mPres.Frequency_Id = Convert.ToInt32(dt.Rows[i]["FrequencyID"]); mPres.Days = Convert.ToInt32(dt.Rows[i]["Days"]); mPres.Amount = Convert.ToDecimal(dt.Rows[i]["Amount"].ToString());//發藥數量 mPres.Unit = dt.Rows[i]["Unit"].ToString();//發藥單位 mPres.Item_Amount = Convert.ToInt32(Convert.ToDecimal(dt.Rows[i]["Amount"]));//開藥數量 mPres.Item_Unit = dt.Rows[i]["Unit"].ToString();//開藥單位 mPres.Item_Rate = 1;//係數 mPres.Group_Id = Convert.ToInt32(dt.Rows[i]["GroupID"]);//分組組號 mPres.SkinTest_Flag = ConvertDataExtend.ToInt32(dt.Rows[i]["IsAst"], 0);//皮試 mPres.SelfDrug_Flag = 0;//自備 mPres.Entrust = dt.Rows[i]["Memo"].ToString();//囑託 mPres.FootNote = ""; mPres.Tc_Flag = 0;//套餐 mPres.Usage_Name = dt.Rows[i]["ChannelName"].ToString();//用法名稱 mPres.Frequency_Name = dt.Rows[i]["FrequencyName"].ToString();//頻次名稱 mPres.Frequency_Caption = dt.Rows[i]["ExecuteCode"].ToString();//頻次名稱 int _execNum, _cycleDay; CardDataSourceFrequency.Calculate(dt.Rows[i]["ExecuteCode"].ToString(), out _execNum, out _cycleDay); mPres.Frequency_ExecNum = _execNum;//執行次數 mPres.Frequency_CycleDay = _cycleDay;//執行週期 mPres.CalculateAmount(null); list_Prescription.Add(mPres); } return list_Prescription; //throw new NotImplementedException(); } public Prescription GetPresTemplateRow(int type, int itemId) { CardDataSourceDrugItem durgItem = GetDrugItem(itemId); if (durgItem == null) throw new Exception("該項目已停用,不能開出!"); Prescription mPres = new Prescription(); mPres.Item_Id = ConvertDataExtend.ToInt32(durgItem.ItemId, -1); mPres.Item_Name = ConvertDataExtend.ToString(durgItem.ItemName, ""); mPres.Item_Type = type;//Convert.ToInt32(durgItem.ItemType);//1西藥 2中藥 3項目材料 mPres.StatItem_Code = ConvertDataExtend.ToString(durgItem.StatItemCode, ""); ; mPres.Sell_Price = durgItem.SellPrice; mPres.Buy_Price = durgItem.BuyPrice; mPres.Item_Price = durgItem.SellPrice; mPres.Standard = durgItem.Standard; mPres.Usage_Amount = durgItem.default_Usage_Id;//劑量 mPres.Usage_Unit = durgItem.DoseUnitName;//劑量單位 mPres.Usage_Rate = durgItem.DoseConvertNum;//劑量係數 if (mPres.IsHerb) mPres.Dosage = 1;//付數 else mPres.Dosage = 0; mPres.Usage_Id = durgItem.default_Usage_Id; mPres.Frequency_Id = durgItem.default_Frequency_Id; mPres.Days = Convert.ToInt32(1); //mPres.Amount = 0;//發藥數量 mPres.Unit = durgItem.UnPickUnit;//發藥單位 mPres.Item_Amount = Convert.ToInt32(1);//開藥數量 mPres.Item_Unit = durgItem.UnPickUnit;//開藥單位 mPres.Item_Rate = Convert.ToInt32(1);//係數 mPres.SkinTest_Flag = durgItem.SkinTestFlag;//皮試 mPres.SelfDrug_Flag = Convert.ToInt32(0);//自備 mPres.Entrust = "";//囑託 mPres.FootNote = ""; mPres.Tc_Flag = 0;//套餐 mPres.Pres_Date = Convert.ToDateTime(DateTime.Now); mPres.Usage_Name = durgItem.default_Usage_Name;//用法名稱 mPres.Frequency_Name = durgItem.default_Frequency_Name;//頻次名稱 string _caption = ""; CardDataSourceFrequency freq = GetFrequency().Find(x => x.FrequencyId == mPres.Usage_Id); if (freq != null) _caption = freq.Caption; //string _caption = CardDataSource.Tables["frequencydic"].Select("FrequencyId=" + mPres.Usage_Id)[0]["Caption"].ToString(); mPres.Frequency_Caption = _caption;//頻次名稱 int _execNum, _cycleDay; CardDataSourceFrequency.Calculate(_caption, out _execNum, out _cycleDay); mPres.Frequency_ExecNum = _execNum;//執行次數 mPres.Frequency_CycleDay = _cycleDay;//執行週期 mPres.IsFloat = true;//row["RoundingMode"] mPres.Usage_Amount = mPres.Usage_Amount <= 0 ? 1 : mPres.Usage_Amount; mPres.CalculateAmount(durgItem.UnPickUnit);//計算數量 和 金額 return mPres; //throw new NotImplementedException(); } public bool IsCostPres(List<Prescription> list) { if (list.Count == 0) return false; string strsql = @"select count(*) num from Clinic_PrescriptionDetail where ID IN({0}) AND IsCharged=1"; string Ids = null; for (int i = 0; i < list.Count; i++) { if (Ids == null) Ids = list[i].PresListId.ToString(); else Ids += "," + list[i].PresListId.ToString(); } strsql = string.Format(strsql, Ids); object ret = oleDb.GetDataResult(strsql); if (Convert.ToInt32(ret) > 0) { return true; } return false; } public bool IsDrugStore(Prescription pres) { if (pres.Item_Id > 0 && pres.IsDrug == true) { string strsql = @"SELECT top 1 ActualQty FROM ViewBaseData_Med WHERE StockID ={0}"; strsql = string.Format(strsql, pres.Item_Id); object ret = oleDb.GetDataResult(strsql); decimal qty = ret == DBNull.Value ? 0 : Convert.ToDecimal(ret); if (pres.Amount > qty) return false; } return true; } public bool IsDrugStore(List<Prescription> list, List<Prescription> errlist) { list = list.FindAll(x => x.IsDrug == true); if (list.Count == 0) { return true; } string strsql = @"SELECT StockID,ActualQty FROM ViewBaseData_Med WHERE StockID IN ({0}) "; string Ids = null; for (int i = 0; i < list.Count; i++) { if (Ids == null) Ids = list[i].Item_Id.ToString(); else Ids += "," + list[i].Item_Id.ToString(); } strsql = string.Format(strsql, Ids); DataTable dt = oleDb.GetDataTable(strsql); //errlist = new List<Entity.Prescription>(); for (int i = 0; i < list.Count; i++) { DataRow[] drs = dt.Select("StockID=" + list[i].Item_Id); if (drs.Length == 0 || ConvertDataExtend.ToDecimal(drs[0]["ActualQty"], 0) < list[i].Amount) { errlist.Add(list[i]); } } if (errlist.Count > 0) return false; return true; } public List<Prescription> GetPrescriptionData(int patListId, int presType) { string strsql = @"SELECT b.ID ListID,b.PrescriptionID,b.FeeID,b.FeeName,b.Price,b.Spec,b.Dosage,b.DosageUnit,b.Factor,b.Num,b.ChannelID,b.FrequencyID,b.Days,b.Amount,b.Unit,b.PresAmount,b.PresAmountUnit,b.PresFactor ,b.GroupID,b.IsAst,b.IsTake,b.Memo ,b.ListNO,0 OrderNO,b.IsCharged,b.IsCancel ,c.ChannelName,d.FrequencyName,d.ExecuteCode ,1 RoundingMode ,b.DoctorID,b.DeptCode,'' PresDoctorName,'' PresDeptName FROM Clinic_PrescriptionList a LEFT JOIN Clinic_PrescriptionDetail b ON a.ID=b.PrescriptionID LEFT JOIN Clinic_Channel AS c ON b.ChannelID = c.ID LEFT JOIN Clinic_Frequency AS d ON b.FrequencyID = d.ID WHERE a.PatientID={0} AND a.OrderClass={1} AND b.ID IS NOT NULL ORDER BY b.ListNO,b.GroupID"; strsql = string.Format(strsql, patListId, presType); DataTable dt = oleDb.GetDataTable(strsql); //int _orderNo = 1;//行號 List<Prescription> list_Prescription = new List<Prescription>(); for (int i = 0; i < dt.Rows.Count; i++) { Prescription mPres = new Prescription(); mPres.PresListId = Convert.ToInt32(dt.Rows[i]["ListID"]); mPres.PresHeadId = Convert.ToInt32(dt.Rows[i]["PrescriptionID"]); //mPres.OrderNo = i + 1;//行號 mPres.Item_Id = Convert.ToInt32(dt.Rows[i]["FeeID"]); mPres.Item_Name = dt.Rows[i]["FeeName"].ToString(); mPres.Item_Type = 1;// Convert.ToInt32(dt.Rows[i]["ItemClass"]);//1西藥 2中藥 3項目材料 mPres.StatItem_Code = ""; mPres.Sell_Price = Convert.ToDecimal(dt.Rows[i]["Price"]); mPres.Buy_Price = Convert.ToDecimal(dt.Rows[i]["Price"]); mPres.Item_Price = Convert.ToDecimal(dt.Rows[i]["Price"]); mPres.Standard = dt.Rows[i]["Spec"].ToString(); mPres.Usage_Amount = Convert.ToDecimal(dt.Rows[i]["Dosage"]);//劑量 mPres.Usage_Unit = dt.Rows[i]["DosageUnit"].ToString();//劑量單位 mPres.Usage_Rate = Convert.ToDecimal(dt.Rows[i]["Factor"]);//劑量係數 mPres.Dosage = Convert.ToInt32(dt.Rows[i]["Num"]); ;//付數 mPres.Usage_Id = Convert.ToInt32(dt.Rows[i]["ChannelID"]); mPres.Frequency_Id = Convert.ToInt32(dt.Rows[i]["FrequencyID"]); mPres.Days = Convert.ToInt32(dt.Rows[i]["Days"]); mPres.Amount = Convert.ToDecimal(dt.Rows[i]["Amount"].ToString());//發藥數量 mPres.Unit = dt.Rows[i]["Unit"].ToString();//發藥單位 mPres.Item_Amount = Convert.ToInt32(Convert.ToDecimal(dt.Rows[i]["PresAmount"]));//開藥數量 mPres.Item_Unit = dt.Rows[i]["PresAmountUnit"].ToString();//開藥單位 mPres.Item_Rate = Convert.ToInt32(Convert.ToDecimal(dt.Rows[i]["PresFactor"]));//係數 mPres.Group_Id = Convert.ToInt32(dt.Rows[i]["GroupID"]);//分組組號 mPres.SkinTest_Flag = Convert.ToInt32(dt.Rows[i]["IsAst"]);//皮試 mPres.SelfDrug_Flag = Convert.ToInt32(dt.Rows[i]["IsTake"]);//自備 mPres.Entrust = dt.Rows[i]["Memo"].ToString();//囑託 mPres.FootNote = ""; mPres.Tc_Flag = 0;//套餐 mPres.PresNo = Convert.ToInt32(dt.Rows[i]["ListNO"]);//方號 mPres.Dept_Id = 0;//執行科室 mPres.Pres_Dept = Convert.ToInt32(dt.Rows[i]["DeptCode"]); mPres.Pres_DeptName = dt.Rows[i]["PresDeptName"].ToString(); mPres.Pres_Doc = Convert.ToInt32(dt.Rows[i]["DoctorID"]); mPres.Pres_DocName = dt.Rows[i]["PresDoctorName"].ToString(); if (Convert.ToInt32(dt.Rows[i]["IsCancel"]) == 1) mPres.Status = PresStatus.退費狀態; else if (Convert.ToInt32(dt.Rows[i]["IsCharged"]) == 1) mPres.Status = PresStatus.收費狀態; else mPres.Status = PresStatus.保存狀態; //mPres.Pres_Date = Convert.ToDateTime(dt.Rows[i]["chargedTime"]); mPres.Usage_Name = dt.Rows[i]["ChannelName"].ToString();//用法名稱 mPres.Frequency_Name = dt.Rows[i]["FrequencyName"].ToString();//頻次名稱 mPres.Frequency_Caption = dt.Rows[i]["ExecuteCode"].ToString();//頻次名稱 int _execNum, _cycleDay; CardDataSourceFrequency.Calculate(dt.Rows[i]["ExecuteCode"].ToString(), out _execNum, out _cycleDay); mPres.Frequency_ExecNum = _execNum;//執行次數 mPres.Frequency_CycleDay = _cycleDay;//執行週期 mPres.CalculateItemMoney(); list_Prescription.Add(mPres); } return list_Prescription; } public bool SavePrescriptionData(int patListId, List<Prescription> list, int presType) { List<string> sqllist = new List<string>(); string strsql = @"select ID from Clinic_PrescriptionList where PatientID ={0} AND OrderClass={1}"; strsql = string.Format(strsql, patListId, presType); object ret = oleDb.GetDataResult(strsql); int headId = ret == DBNull.Value ? 0 : Convert.ToInt32(ret); if (headId == 0)//先插入處方頭 { strsql = @"INSERT INTO Clinic_PrescriptionList ( PatientID , OrderClass , OrderTime) VALUES ( {0},{1},'{2}')"; strsql = string.Format(strsql, patListId, presType, DateTime.Now); headId = oleDb.InsertRecord(strsql); } //先刪除修改數據 strsql = @"DELETE FROM Clinic_PrescriptionDetail WHERE ID IN({0})"; string Ids = null; for (int i = 0; i < list.Count; i++) { if (Ids == null) Ids = list[i].PresListId.ToString(); else Ids += "," + list[i].PresListId.ToString(); } strsql = string.Format(strsql, Ids); //MidDbHelper.ExecuteNonQuery(MidDbHelper.EmrHandle, strsql); sqllist.Add(strsql); for (int i = 0; i < list.Count; i++) { strsql = @"INSERT INTO Clinic_PrescriptionDetail(PrescriptionID ,ListNO ,GroupID ,FeeID ,FeeName ,Spec ,Dosage ,DosageUnit ,Factor ,ChannelID ,FrequencyID ,Num ,Amount ,Unit ,Price ,Days ,IsAst ,AstResult ,IsTake ,Memo ,IsCharged ,IsCancel,IsSend ,DoctorID ,DeptCode ,CostID ,FavorFee ,PresAmount ,PresAmountUnit ,PresFactor ) VALUES ( {0} --PrescriptionID ,{1}--ListNO ,{2} --GroupID ,{3} --FeeID ,'{4}' --FeeName ,'{5}'--Spec ,{6}--Dosage ,'{7}'--DosageUnit ,{8} ,{9} ,{10},{11} ,{12} --Amount ,'{13}' ,{14} ,{15} --Days ,{16}--IsAst ,'' --AstResult ,{17} ,'{18}' ,0 ,0 ,0,{19} --DoctorID ,'{20}' --DeptCode ,0 --CostID ,0 --FavorFee ,{21} --PresAmount ,'{22}'--PresAmountUnit ,{23}--PresFactor )"; strsql = string.Format(strsql, headId//0 , list[i].PresNo//1 , list[i].Group_Id , list[i].Item_Id , list[i].Item_Name , list[i].Standard//5 , list[i].Usage_Amount, list[i].Usage_Unit, list[i].Usage_Rate//8 , list[i].Usage_Id, list[i].Frequency_Id, list[i].Dosage, list[i].Amount//12 , list[i].Unit, list[i].Sell_Price, list[i].Days//15 , list[i].SkinTest_Flag//16 , list[i].SelfDrug_Flag, list[i].Entrust, list[i].Pres_Doc//19 , list[i].Pres_Dept//20 , list[i].Item_Amount//21 , list[i].Item_Unit//22 , list[i].Item_Rate//23 ); sqllist.Add(strsql); } for (int i = 0; i < sqllist.Count; i++) { oleDb.DoCommand(sqllist[i]); } return true; } public bool DeletePrescriptionData(int presListId) { string strsql = @"DELETE FROM Clinic_PrescriptionDetail WHERE ID ={0} and IsCharged=0"; strsql = string.Format(strsql, presListId); oleDb.DoCommand(strsql); return true; } public bool DeletePrescriptionData(int patListId, int presType, int PresNo) { string strsql = @"DELETE FROM Clinic_PrescriptionDetail WHERE IsCharged=0 AND PrescriptionID IN(SELECT ID FROM Clinic_PrescriptionList WHERE PatientID={0} AND OrderClass={1}) AND ListNO={2}"; strsql = string.Format(strsql, patListId, presType, PresNo); oleDb.DoCommand(strsql); return true; } public bool UpdatePresNoAndGroupId(List<Prescription> data) { List<string> sqllist = new List<string>(); for (int i = 0; i < data.Count; i++) { string strsql = @"UPDATE Clinic_PrescriptionDetail SET ListNO={1},GroupID={2} WHERE ID={0}"; strsql = string.Format(strsql, data[i].PresListId, data[i].PresNo, data[i].Group_Id); sqllist.Add(strsql); } for (int i = 0; i < sqllist.Count; i++) { oleDb.DoCommand(sqllist[i]); } return true; } public bool UpdatePresSelfDrugFlag(int presListId, int Flag) { string strsql = @"UPDATE Clinic_PrescriptionDetail SET IsTake={1} WHERE ID={0}"; strsql = string.Format(strsql, presListId, Flag); oleDb.DoCommand(strsql); return true; } #endregion }
總結:本章主要是擴展介紹EFW框架中的Winform系統自定義控件,利用框架中的自定義控件能夠開發出相對複雜的業務功能,還有就是業務控件的設計思路,業務邏輯要徹底獨立於數據源,用接口的方式封裝數據源的操做;框架
控件DEMO下載ide