在我们Winform开发中,往往需要涉及到附件的统一管理,因此我倾向于把它们独立出来作为一个附件管理模块,这样各个模块都可以使用这个附件管理模块,更好的实现模块重用的目的。在涉及附件管理的场景中,一个数据记录可能对应多个附件组场景,每个附件组则涉及附件多个文件,往往这些附件可能放置的目录会有所不同,导致如果对文件备份管理不是很方便。本篇随笔主要基于这个考虑,对附件文件进行一个集中归档的处理,以便把散落在各个地方的附件集中放置在我们制定的归档目录中,而且并不影响已有附件的关联显示。

1、附件的界面管理

我们在做数据记录存储的时候,一个记录可能需要存储多个场景下的附件信息,这些维护查看附件的界面可以做成相对比较统一的控件方式进行展示,这样我们使用起来就比较省事一些。

样在项目中集成(如数据编辑窗口),直接拖动这个控件到界面中,运行就可以看到下面的效果了。

在实际的项目中,如客户信息,病人信息等记录,可能对应多个附件记录,那么我们把它们分组进行管理即可。

附件管理在很多信息化管理系统中很普遍使用,例如我在病人管理系统界面里面,可以在一个界面里面分门别类管理很多影像学的图片资料,通过查看附件,可以看到其中一些图片附件的缩略图,需要进一步查看,可以双击图片即可实现预览效果。

附件管理的上传界面如下所示,可以从本地选择多个文件一并上传,每个文件上传成功后立即显示状态。

以上就是一些附件管理和使用的界面,这些界面有助于我们针对性的对特定的附件进行查看、维护管理。

2、附件的归档管理

附件的处理,我们通常是把它上传到指定的目录下面,这个目录可以是配置好的特定目录,不过随着程序的运行,这个目录的附件会越来越多,更加难以管理,对于一些病历图片、视频信息这些比较重要的资料,我们往往是需要进行归档备份起来,以便在某个数据灾难后进行恢复,把损失降到最少。

归档文件还有一个作用,就是我们可以以资源管理器的方式同一打开一个目录,然后在里面寻找或者查看该记录相关的所有附件信息,这种比在某个界面附件分组中寻找指定的附件,提供更广范围的指引。

上图就是在实际项目中,需要直接打开某个特定目录的文件,然后查找这个目录下的文件或者打开查看详细信息。这里可能会问,单机版可以直接打开本地目录,如果是混合框架,数据和文件集中在云端服务器的,你如何打开对应的目录文件呢?

这里其实我们普通的Winform程序是可以直接打开本地文件,如果是使用Web API或者WCF通讯的混合框架模式,则是通过文件路径的方式,从服务器端检索对应的文件列表信息,然后进行呈现的,因此就需要在附件管理模块提供对应的接口来获取文件信息了。

下面我们来介绍一下,归档处理的实现,以及通过文件路径获取对应文件列表的处理。

由于病历附件这里我做成了一个用户控件的方式,方便各个模块重用的,因此归档的方式我做了一个功能按钮,并通过事件的方式给外部实现逻辑。

我们通过定义事件的方式来定义这个处理,然后外部可以实现这个事件即可。

按钮的事件处理,就是调用这个我们自定义的事件处理即可。

        private void btnArchive_Click(object sender, EventArgs e)
{
if (OnArchived != null)
{
string tips = "您确认需要进行图片归档处理吗?";
if (MessageDxUtil.ShowYesNoAndTips(tips) == DialogResult.Yes)
{
//执行归档处理
OnArchived(this.info);
}
}
}

而编辑的窗体,我们显示数据的时候,初始化这个事件的处理即可。

        /// <summary>
/// 数据显示的函数
/// </summary>
public override void DisplayData()
{
InitDictItem();//数据字典加载(公用) BindPatient();//绑定显示病人资料 //绑定数据并显示
attchmentControl.BindData(PatientInfo.ID);
attchmentControl.OnArchived += AttchmentControl_OnArchived;
attchmentControl.Dock = DockStyle.Fill;
this.pageAttachment.Controls.Clear();
this.pageAttachment.Controls.Add(attchmentControl); BindData();
}

而对于处理归档的事件,主要就是我们确定好归档的目录(部分信息),然后交给服务器端处理进行归档即可。这里确定目录的信息,有患者姓名和诊断部分信息组成。

而服务端的最终处理逻辑,也就是根据对应附件的ID,然后找出对应的文件,移动原来文件到新的目录里面,并更新数据库记录中的附件路径信息即可。

....

为了实现对文件路径的文件检索和下载指定文件,我们需要扩展一下原来附件管理通过ID获取和下载文件的方式,原来的是从数据库获取文件路径,并打开下载文件;而扩展后可以通过路径方式获取文件信息。

在Winform开发框架中对附件文件进行集中归档处理的更多相关文章

  1. Winform开发框架之通用附件管理模块 --SNF快速开发平台3.3-Spring.Net.Framework

    最近项目太多都没有时间写文章了,实际项目需求一,CS端和windows平板都需要附件上传管理功能.以前做的都是BS的附件管理和上传功能.本来计划在Winform上嵌套一个浏览器直接用bs的附件上传功能 ...

  2. Winform开发框架中工作流模块之申请单草稿处理

    在我们开发工作流模块的时候,有时候填写申请单过程中,暂时不想提交审批,那么可以暂存为草稿,以供下次继续填写或者提交处理,那么这个草稿的功能是比较实用的,否则对于一些填写内容比较多的申请单,每次要重填写 ...

  3. 参照企业微信审批业务,在Winform开发框架中工作流模块的实现业务审批

    目前微信的企业号已经切换到企业微信里面,这个是一个APP程序,提供了很丰富的企业应用,其中包括了业务审批处理,审批业务包括请假.报销.费用.出差等很多个审批场景,在Winform开发框架中工作流模块这 ...

  4. Winform开发框架中实现同时兼容多种数据库类型处理

    在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适 ...

  5. 在Winform开发框架中,利用DevExpress控件实现数据的快速录入和选择

    在实际的项目开发过程中,有好的控件或者功能模块,我都是想办法尽可能集成到我的WInform开发框架中,这样后面开发项目起来,就可以节省很多研究时间,并能重复使用,非常高效方便.在我很早之前的一篇博客& ...

  6. Winform开发框架中工作流模块之审批会签操作(2)

    前面随笔介绍了请假申请单和报销申请单两个不同的业务表单的流程处理,一个是单表信息,一个包含明细的主从表信息,后者包含了条件流程的处理,在流程审批中,一般还有一种流程处理就是会签的操作,会签处理是几个审 ...

  7. Winform开发框架中工作流模块之审批会签操作

    在前面介绍了框架中工作流的几个开发过程,本篇随笔重点介绍一下日常审批环节中的具体处理过程,从开始创建表单,以及各个审批.会签过程的流转过程,希望大家对其中流程的处理有一个大概的印象. 1.请假申请表单 ...

  8. Winform开发框架中工作流模块的业务表单开发

    在我们开发工作流的时候,往往需要设计到具体业务表单信息的编辑,有些是采用动态编辑的,有些则是在开发过程中处理的,各有各的优点,动态编辑的则方便维护各种各样的表单,但是数据的绑定及处理则比较麻烦,而自定 ...

  9. Winform开发框架中工作流模块的表设计分析

    在较早博客随笔里面写过文章<Winform开发框架之简易工作流设计>之后,很久没有对工作流部分进行详细的介绍了,本篇继续这个主题,详细介绍其中的设计.实现及效果给大家,这个工作流在好几年前 ...

随机推荐

  1. 【RL-TCPnet网络教程】第41章 HTTP超文本传输协议基础知识

    第41章      HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...

  2. mysql的学习笔记(七)

    1.自定义函数,函数可以返回任意类型的值,同样可接说这些类型的参数. CREATE FUNCTION function_name RETURNS {STRING|INTER|REAL|DECIMAL} ...

  3. 三分钟学会.NET微服务之Polly

    熔断降级是一个非常重要的概念,我们先说一下什么是熔断降级,咱们都知道服务发现,一个有问题的服务器没来得急注销过一会就崩溃掉了,那么我们的请求就有可能访问一个已经崩溃的服务器,那么就会请求失败,因为已经 ...

  4. qml demo分析(rssnews-常见新闻布局)

    一.效果展示 今儿来分析一篇常见的ui布局,完全使用qml编写,ui交互效果友好,如图1所示,是一个常见的客户端新闻展示效果,左侧是一个列表,右侧是新闻详情. 图1 新闻效果图 二.源码分析 首先先来 ...

  5. 【Android Studio安装部署系列】十、Android studio打包发布apk安装包

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 使用Android studio发布apk安装包的操作步骤. 开始打包发布apk Build > Generate Signe ...

  6. 使用 ASP.NET Core MVC 创建 Web API(四)

    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 使 ...

  7. 在Xunit中使用FsCheck

    目录 编写基于Property-based的单元测试 使用FsCheck编写Property-based测试 在Xunit中使用FsCheck 使用FsCheck编写Model-based测试-待续 ...

  8. vue-resource实现数据的绑定、添加、删除

    vue-resource实现数据的绑定.添加.删除 <!DOCTYPE html> <html lang="en"> <head> <ti ...

  9. DS控件库 DS标签的另类用法之折叠展开

    某些场合下,可以通过动态设置DS标签的文本内容来输出不同的显示效果,以下是示例. 示例中的素材   示例资源文本 String1="<linkimg=E1><b>&l ...

  10. Flask实战第3天:url_for使用

    我们之前是通过url来找到对应的视图函数 /     =>    hello_world 那么url_for则是通过视图函数找到url hello world  =>  / 演示如下 #c ...