WCF医院管理系统技术解析(十一)医生体检收入查询(带一定判断的导出Excel)
WCF医院管理系统技术解析(十一)医生体检收入查询(带一定判断的导出Excel)
医院支持对各个科室的体检收入,同时也可以查询到每个体检科室收入的审核医生。效果如图所示:
界面用到的控件有:
控件 |
说明 从工具箱中找到对应的控件,可以设置控件的一些属性和事件。如显示的文本,命名是规范 |
复选框(CheckBox) |
下拉框 (ComBobox)
数据表格 (DataGridView)
按钮(Button)
标签 (Label)
涉及到的数据库中的表和关系有:
表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) |
员工照片 |
|
|
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:项目表(BT_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:体检执行表:【PhysicalExaminationExecuteTable】
列名 |
数据类型 |
主键/外键 |
说明 |
PhysicalExaminationExecuteID |
int |
主键 |
体检执行ID |
ChargeBillID |
int |
外键 |
收费单ID |
ExecuteDoctor_StaffID |
int |
外键 |
执行医生ID |
ExecuteNumber |
nchar (20) |
体检执行单号 |
|
Remarks |
nchar (200) |
备注 |
|
HealthSuggest |
nchar (200) |
健康建议 |
|
WhetherEffective |
bit |
((1)) |
是否有效 |
表4: 科室表: (BT_ TechnicalOfficesTable)
列名 |
数据类型 |
主键/外键 |
说明 |
TechnicalOfficesID |
int |
主键 |
科室ID |
DepartmentID |
int |
外键 |
部门ID |
TechnicalOfficesNumber |
nchar (20) |
科室编号 |
|
TechnicalOfficesName |
nchar (20) |
科室名称 |
|
RegisterSum |
decimal (18, 2) |
挂号金额 |
|
WhetherAllowRegister |
bit |
允许挂号否 |
|
AlphabeticBrevityCode |
nchar (20) |
拼音简码 |
|
WubiInCode |
nchar (20) |
五笔简码 |
|
TechnicalOfficesLocation |
nchar (100) |
科室位置 |
|
Remarks |
nchar (200) |
备注 |
|
WhetherEffective |
bit |
((1)) |
有效否 |
表5:体检执行内容明细表【PW_PhysicalExaminationExecuteContentDetailTable】
列名 |
数据类型 |
主键/外键 |
说明 |
PhysicalExaminationExecuteContentDetailID |
int - Identity |
主键 |
体检执行内容明细ID |
PhysicalExaminationContentID |
int |
外键 |
体检执行内容ID |
ItemID |
int |
外键 |
项目ID |
PhysicalExaminationExecuteContentMessage |
nchar (250) |
体检执行内容信息 |
|
WhetherEffective |
bit |
((1)) |
有效否 |
PhysicalExaminationExecuteID |
int |
外键 |
体检执行ID |
ReportDoctor_StaffID |
int |
外键 |
报告医生ID |
ReportTime |
date |
报告时间 |
数据库涉及到的储存过程有:
--医生体检收入查询汇总if @Type = 'FRM_TiJianZhongHeBaoBiao_Load_Doctor_Income'BEGINSELECT DISTINCT BT_StaffTable.StaffName, BT_TechnicalOfficesTable.TechnicalOfficesName, BT_TechnicalOfficesTable.TechnicalOfficesID, BT_ItemTable.ItemName, PW_PhysicalExaminationExecuteTable.PhysicalExaminationExecuteID, BT_ItemTable.ItemID, PW_PhysicalExaminationExecuteContentDetailTable.ReportDoctor_StaffID, BT_ItemTable.ProjectPriceFROM PW_PhysicalExaminationExecuteTable INNER JOINPW_PhysicalExaminationExecuteContentDetailTable ON PW_PhysicalExaminationExecuteTable.PhysicalExaminationExecuteID = PW_PhysicalExaminationExecuteContentDetailTable.PhysicalExaminationExecuteID INNER JOINBT_ItemTable ON PW_PhysicalExaminationExecuteContentDetailTable.ItemID = BT_ItemTable.ItemID INNER JOINBT_StaffTable ON PW_PhysicalExaminationExecuteContentDetailTable.ReportDoctor_StaffID = BT_StaffTable.StaffID INNER JOINBT_TechnicalOfficesTable ON BT_StaffTable.TechnicalOfficesID = BT_TechnicalOfficesTable.TechnicalOfficesIDEND
BLL中对应的方法有:
//医生体检收入查询汇总[OperationContract]public DataSet FRM_TiJianZhongHeBaoBiao_Load_Doctor_Income(){SqlParameter[] mySqlParameters = {new SqlParameter("@Type",SqlDbType .Char ),};mySqlParameters[0].Value = "FRM_TiJianZhongHeBaoBiao_Load_Doctor_Income ";DataTable dt = myDALMethod.QueryDataTable("TiJianZhongXin_FRM_TiJianZhongHeBaoBiao_Main", mySqlParameters);DataSet ds = new DataSet();ds.Tables.Add(dt);return ds;}
UIL中与之对应的代码有:
#region dgv数据绑定
{DataTable dtcbo_Valuation = new DataTable();//声明一个空表//查询出数据库中的体检执行项目中的医生和科室存放在dt中DataTable dt = myFRM_TiJianZhongHeBaoBiao_MainClient.FRM_TiJianZhongHeBaoBiao_Load_Doctor_Income().Tables[0];//把dt中的的数据进行筛选并存放在 dtcbo_Valuation中dtcbo_Valuation = dt.DefaultView.ToTable(true, "TechnicalOfficesName", "TechnicalOfficesID", "StaffName", "ReportDoctor_StaffID");//在dtcbo_Valuation中添加金额列dtcbo_Valuation.Columns.Add("金额");DataTable dtShuJuMessage = dtcbo_Valuation;//把dtcbo_Valuation绑定到dgv中dtShuJuMessage.Columns.Add("项次");DataTable dtCopy = dt.Copy();//另外声明一个表,复制dt中的数据int intSelect = 0; decimal decProjectPrice = Convert.ToDecimal(0.00);int intYiSheng = 0; int intKeShiID = 0; int intCiShu = 0; //用于获取体检次数汇总decimal decJinE = 0;//用于获取总金额汇总for (int j = 0; j < dtShuJuMessage.Rows.Count; j++)//遍历dtShuJuMessage{intSelect = 0; decimal decTruePrice = Convert.ToDecimal(0.00);if (intKeShiID == Convert.ToInt32(dtShuJuMessage.Rows[j]["TechnicalOfficesID"]) && //判断已循环数据的科室ID与未循环的科室UDintYiSheng == Convert.ToInt32(dtShuJuMessage.Rows[j]["ReportDoctor_StaffID"]))//判断已循环数据的报告医生ID与未循环的报告医生ID{break;//如果相等就跳出循环}else{for (int i = 0; i < dt.Rows.Count; i++)//遍历dt,获取项目价格和科室ID与报告医生ID{int intTechnicalOfficesID1 = Convert.ToInt32(dtShuJuMessage.Rows[j]["TechnicalOfficesID"]);int YishenID = Convert.ToInt32(dtShuJuMessage.Rows[j]["ReportDoctor_StaffID"]);decProjectPrice = Convert.ToDecimal(dt.Rows[i]["ProjectPrice"]);//获取项目价格if (intTechnicalOfficesID1 == Convert.ToInt32(dt.Rows[i]["TechnicalOfficesID"]) &&//判断dgv中的科室ID是否和dt表中的科室ID进行比较YishenID == Convert.ToInt32(dt.Rows[i]["ReportDoctor_StaffID"]))//判断已循环数据的报告医生ID与未循环的报告医生ID比较{//如果相等,那么intSelect++;//声明一个变量累加项次intYiSheng = YishenID;//用变量分别获取医生ID 和科室ID,用于判断之后的医生和科室ID是否和已经循环的医生和科室IDintKeShiID = intTechnicalOfficesID1;decTruePrice = decProjectPrice + decTruePrice;//对应体检项目价格进行累加}}dtShuJuMessage.Rows[j]["项次"] = intSelect;//把累加的项次变量结果赋值给次数dtShuJuMessage.Rows[j]["金额"] = decTruePrice;//项目价格赋值给金额intCiShu += intSelect;//获取体检次数decJinE += decTruePrice;//获取总金额if (Convert.ToInt32(dtShuJuMessage.Rows[j]["项次"]) == 0)//如果项次为零的,就移除该行{dtShuJuMessage.Rows.RemoveAt(j);}}}DataRow dr = dtShuJuMessage.NewRow();//往dtShuJuMessage中添加新行dr["TechnicalOfficesName"] = "总计:";dr["项次"] = intCiShu;dr["金额"] = decJinE;dtShuJuMessage.Rows.Add(dr);dgv_AllDoctorIncomeMessage.DataSource = dtShuJuMessage;#endregion}
点击导出会把数据表格中的数据导出到Excel中,其导出效果如下图:
功能实现步骤一:点击解决方案总的引用
添加如下几个引用
如下图:
当点击导出,把数据导出到数据表格当中,在导出按钮后面写如下代码:
if (dgv_AllDoctorIncomeMessage.Rows.Count > 0){PublicStaticMothd.DataGridViewToExcel(dgv_AllDoctorIncomeMessage);}
为公共方法:代码如下:
public static void DataGridViewToExcel(DataGridView dgv){#region 验证可操作性SaveFileDialog dlg = new SaveFileDialog();//申明保存对话框 dlg.DefaultExt = "xls ";//默认文件后缀 dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";//文件后缀列表 dlg.InitialDirectory = Directory.GetCurrentDirectory();//默然路径是系统当前路径 if (dlg.ShowDialog() == DialogResult.Cancel) return;//打开保存对话框 string fileNameString = dlg.FileName; //返回文件路径 if (fileNameString.Trim() == " ") //验证strFileName是否为空或值无效 {MessageBox.Show("名字不能为空,请输入文件名字!", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}int rowscount = dgv.Rows.Count; //定义表格内数据的行数和列数 int colscount = dgv.Columns.Count;if (rowscount <= 0) //行数必须大于0 {MessageBox.Show("没有数据可供保存!", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}if (colscount <= 0) //列数必须大于0 {MessageBox.Show("没有数据可供保存!", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}if (rowscount > 65536) //行数不可以大于65536 {MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存!", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}if (colscount > 255)//列数不可以大于255 {MessageBox.Show("数据记录列数太多,不能保存!", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}FileInfo file = new FileInfo(fileNameString); //验证以fileNameString命名的文件是否存在,如果存在删除它 if (file.Exists)//对存在fileNameString命名的文件进行删除{try{file.Delete();//删除}catch (Exception error){MessageBox.Show(error.Message, "删除失败!", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}}#endregionMicrosoft.Office.Interop.Excel.Application objExcel = null;Microsoft.Office.Interop.Excel.Workbook objWorkbook = null;Microsoft.Office.Interop.Excel.Worksheet objsheet = null;try{objExcel = new Microsoft.Office.Interop.Excel.Application();//申明对象 objWorkbook = objExcel.Workbooks.Add(Missing.Value);objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.ActiveSheet;objExcel.Visible = false;//设置EXCEL不可见 int displayColumnsCount = 1; //向Excel中写入表格的表头 for (int i = 0; i <= dgv.ColumnCount - 1; i++)//遍历dgv中的列名数据集合{if (dgv.Columns[i].Visible == true){objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();displayColumnsCount++;}}for (int row = 0; row <= dgv.RowCount - 1; row++)//遍历dgv中行数据集合{displayColumnsCount = 1;for (int col = 0; col < colscount; col++){if (dgv.Columns[col].Visible == true){try{objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();displayColumnsCount++;}catch (Exception){}}}}objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value);}catch (Exception error){MessageBox.Show(error.Message, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}finally{//关闭Excel应用 if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);if (objExcel.Workbooks != null) objExcel.Workbooks.Close();if (objExcel != null) objExcel.Quit();objsheet = null;objWorkbook = null;objExcel = null;}MessageBox.Show(fileNameString + "\n\n导出完毕!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}#endregion
这样就可以把数据表格中的数据导出到Excel中。
WCF医院管理系统技术解析(十一)医生体检收入查询(带一定判断的导出Excel)相关推荐
- WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)
WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表) 对于已经完成体检的病人,对其进行体检结果的打印,其体检结果报告打印效果如图: 界面涉及到的控件有: 控件 说明 从工具箱中找到对应的报表控 ...
- WCF医院管理系统技术解析(七)体检登记(六)前台收费
WCF医院管理系统技术解析(七)体检登记(六)前台收费 设置好病人的体检项目后,病人就要到前台进行支付体检的相关费用,点击体检登记界面中的 前台收费中的界面效果如图所示: 2.9.8(图57) ...
- WCF医院管理系统技术解析(五)体检登记(四)
WCF医院管理系统技术解析(五)体检登记(四)涉及拼音简码 体检登记中的新增病人(需要注意的是:该病人不经过挂号和处方,只是到医院进行体检)与医院中的前台登记病人不同. 对于这种情况:我的思路是:该病 ...
- 承志医院管理系统项目解析 门诊医生工作站—辅助检查项目(六)
1.33辅助检查 在需要做辅助检查的时候,选择病人,然后选择相关信息的辅助检查项目,如图(1).(2)所示:: 图(1) 图(2) 从界面上可以看到我们这里用到的控件有 控件名称 说明 日期控件(Da ...
- 承志医院管理系统项目解析 门诊医生工作站—书写病历(四)
1.3门诊医生工作站 由门诊医生进行看病,开药与诊疗方案. 1.31书写病历 书写病历这个模块,主要是给病人写病历,如图(1) 图(1) 控件名称 说明 日期控件(DateTimePicker) 控件 ...
- 海马汽车经销商管理系统技术解析(三)应收管理
海马汽车经销商管理系统技术解析(三)应收管理 应收管理这个模块可以查看所有欠款的客户和每个客户的欠款明细信息,还可以新建欠账单和删除欠账单.可以通过客户姓名.发生日期等条件对欠账单进行筛选查询.还可以 ...
- 海马汽车经销商管理系统技术解析(二)维修收银
海马汽车经销商管理系统技术解析(二)维修收银 维修收银这个模块可以查看已经结算和已经收款的工单.可以通过工单号.车主姓名等条件对工单进行筛选查询.还可以对工单进行收银.刷新操作. 主界面如图(图1)所 ...
- 海马汽车经销商管理系统技术解析(五)车辆续保提醒
海马汽车经销商管理系统技术解析(五)车辆续保提醒 车辆续保提醒这个模块会把三天后需要续保的客户及车辆信息显示在车辆续保提醒界面,然后可以对信息进行提醒操作,还有查询.上页.下页操作. 车辆续保提醒主界 ...
- 海马汽车经销商管理系统技术解析(六)顾客生日祝贺
海马汽车经销商管理系统技术解析(六)顾客生日祝贺 顾客生日祝贺模块会把当天生日的顾客信息显示在顾客生日祝贺界面,然后可以对客户进行生日祝贺,还有上页.下页操作. 顾客生日祝贺主界面如图(图1)所示: ...
最新文章
- pandas使用split函数将dataframe中的特定列表字段(list column)裂变为多个数据列并拼接到原dataframe中
- java方法,返回两个日期内的所有date集合,根据开始时间、结束时间得到两个时间段内所有的日期...
- [开发工具]借助dillinger.io,在博客园写markdown
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | RawDexFile.cpp 分析 | dvmRawDexFileOpen函数读取 DEX 文件 )
- 数据结构34:二叉树前序遍历、中序遍历和后序遍历
- 全国计算机等级考试题库二级C操作题100套(第74套)
- 计算机公开课推荐 2019.8
- keil中如何查看代码大小
- hdu 1536 S-Nim (sg)
- phpcms二次开发摘要
- bt4-pre-final下用spoonwep+spoonwpa破解wep或wpa加密的无线网络
- k3服务器重装系统,金蝶K3安装教程07:K3 WEB系统配置工具
- 【AS】Android stdio运行APP闪退或keeps stopping
- 创业冲突的五种解决方法是_避免创业合伙人之间发生冲突的四种方法
- 【观察】四川产业转型“加速跑”,鲲鹏生态助推“新升级”
- React技术栈探究-Redux
- 多模态特征表示和融合
- 2.1 安装 go-gtk
- 项目计划书模板,案例
- 现金贷、信用贷、消费贷小贷系统后台、现金贷、消费贷、信用贷、助学贷、旅游贷、装修贷、准入授信 、贷款申请、产品授信、合同管理、放款审批、放款登记、还款管理、贷后检查、贷后预警、贷款结项、Axure原型
热门文章
- Qt - WPS文本编辑器(WPS文档打印预览)
- 苹果手机网速慢_为什么手机信号满格,网速还是很差?
- 黑客之道-解码Facebook的DevOps之路
- PS纯黑文字不纯黑,模糊?看这里
- 华为服务器 2288v3 型号服务器更换阵列卡
- 守护进程/僵尸进程/孤儿进程
- html多张图片组合成一张,如何把多张图片快速拼接组合到一起成一张_微信图文排版技巧?...
- js数组随机排列组合
- 计算机表格计算公式总分,word中怎么算总分 word里怎么计算总分
- 剑与家园找不到国际服服务器,剑与家园外服客户端