0
回答
病人管理系统中查看管理图片功能的实现
终于搞明白,存储TCO原来是这样算的>>>   
在我的共享软件-病人资料管理系统(该软件是是一款针对病人基本情况、手术情况、化疗情况、随访情况的存储、修改维护、条件查询、导出导出Excel、科室数据合并、图片查找、数据打印、高级查询等功能的软件)中,客户需要实现对某个属性的图片进行管理维护,图片数量要求有多个,而且同一个资料编辑或者查看中,有很多这样的字段要求进行图片管理,效果如下所示。

 
基本实现方式就是在每个需要保存图片字段用GUID来记录,然后图片记录放到一个独立的表总,通过GUID来识别是属于那种类型的图片。

我们要保证在新建及编辑的时候,都可以正常的添加管理图片,那么我们就需要在加载信息的时候,设置对应按钮的Tag为一个独立的GUID字段,类似下面的代码:

新建的时候,设置类似下面的代码:

             this .btnSHCT.Tag  =  Guid.NewGuid().ToString();
            
this .btnSHMRI.Tag  =  Guid.NewGuid().ToString();
            
this .btnSHXRAY.Tag  =  Guid.NewGuid().ToString();
            
this .btnSQCT.Tag  =  Guid.NewGuid().ToString();
            
this .btnSQMRI.Tag  =  Guid.NewGuid().ToString();
            this.btnSQXRAY.Tag = Guid.NewGuid().ToString(); 

编辑的时候,类似i下面的代码: 

                 this .btnSHCT.Tag  =   string .IsNullOrEmpty(info.术后CT)  ?  Guid.NewGuid().ToString() : info.术后CT;
                
this .btnSHMRI.Tag  =   string .IsNullOrEmpty(info.术后MRI)  ?  Guid.NewGuid().ToString() : info.术后MRI;
                
this .btnSHXRAY.Tag  =   string .IsNullOrEmpty(info.术后XRay)  ?  Guid.NewGuid().ToString() : info.术后XRay;
                
this .btnSQCT.Tag  =   string .IsNullOrEmpty(info.术前CT)  ?  Guid.NewGuid().ToString() : info.术前CT;
                
this .btnSQMRI.Tag  =   string .IsNullOrEmpty(info.术前MRI)  ?  Guid.NewGuid().ToString() : info.术前MRI;
                this.btnSQXRAY.Tag = string.IsNullOrEmpty(info.术前XRay) ? Guid.NewGuid().ToString() : info.术前XRay; 


 查看图片的时候,实现就是下面所示的代码:

         private   void  btnSHXRAY_Click( object  sender, EventArgs e)
        {
            Button btn 
=  sender  as  Button;
            
string  itemID  =  btn.Tag.ToString();
            SetPictureButtonData(itemID);
        } 


         private void SetPictureButtonData(string existItemID, string sfDate)
        {
            
#region  验证条件
            
if  ( this .txtName.Text.Length  ==   0 )
            {
                MessageUtil.ShowTips(
" 查看管理图片需要先确定患者姓名 " );
                
this .txtName.Focus();
                
return ;
            }
            
else   if  ( this .txtHospitalNo.Text.Length  ==   0 )
            {
                MessageUtil.ShowTips(
" 查看管理图片需要先确定患者住院号 " );
                
this .txtHospitalNo.Focus();
                
return ;
            } 
            
#endregion

            FrmPictureView dlg 
=   new  FrmPictureView();
            
if  ( ! string .IsNullOrEmpty(existItemID))
            {
                dlg.ItemID 
=  existItemID;
            }
            
else
            {
                dlg.ItemID 
=  Guid.NewGuid().ToString();
            }

            dlg.SFDate 
=  sfDate;
            dlg.PatienName 
=   this .txtName.Text;
            dlg.HospitalNo 
=   this .txtHospitalNo.Text;
            dlg.ShowDialog();
        }

        
private   void  SetPictureButtonData( string  existItemID)
        {
            SetPictureButtonData(existItemID, 
"" );
        }

 而所有图片管理都是用一个窗体来实现,设计视图如下所示:

 

 窗体相关的实现代码如下所示:

         private   void  sortableListView1_MouseDoubleClick( object  sender, MouseEventArgs e)
        {
            
if  ( this .sortableListView1.SelectedItems.Count  ==   0 )
                
return ;

            ListViewItem item 
=   this .sortableListView1.SelectedItems[ 0 ];
            
if  (item  !=   null   &&  item.Tag  != null )
            {
                PatientPictureInfo info 
=  item.Tag  as  PatientPictureInfo;
                
if  (info  !=   null   &&  File.Exists(info.PicturePath))
                {
                    Process.Start(info.PicturePath);
                }
                
else
                {
                    MessageUtil.ShowTips(
" 图片文件路径不存在! " );
                }
            }
        }

        
private   void  FrmPictureView_Load( object  sender, EventArgs e)
        {
            BindData();
        }

        
private   void  BindData()
        {
            
if  ( ! string .IsNullOrEmpty(ItemID))
            {
                
this .sortableListView1.Items.Clear();
                List
< PatientPictureInfo >  list  =  BLLFactory < PatientPicture > .Instance.GetAllByItemID( this .ItemID);
                
foreach  (PatientPictureInfo info  in  list)
                {
                    ListViewItem item 
=   new  ListViewItem(info.FileName);
                    item.SubItems.Add(info.PicturePath);
                    item.Tag 
=  info;

                    
this .sortableListView1.Items.Add(item);
                }
            }
        }

        
private   void  btnClear_Click( object  sender, EventArgs e)
        {
            
if  (MessageUtil.ShowYesNoAndWarning( " 您是否确定清除该项目的所有图片记录?\r\n确定后将清除记录但不删除本地图片文件! " ==  DialogResult.Yes)
            {
                
try
                {
                    
bool  success  =  BLLFactory < PatientPicture > .Instance.DeleteAllByItemID( this .ItemID);
                }
                
catch  { }
                
                BindData();
            }
        }

        
private   void  btnAdd_Click( object  sender, EventArgs e)
        {   
            
string  pictureRootDir  =  ConfigurationManager.AppSettings[ " PictureRootDir " ];
            
if  ( string .IsNullOrEmpty(pictureRootDir))
            {
                MessageUtil.ShowError(
" 没有配置项PictureRootDir,请设置一个存放图片文件的主目录! " );
                
return ;
            }

            
string  ImageFilter  =   " Image Files(*.BMP;*.bmp;*.JPG;*.jpg;*.GIF;*.gif;*.PNG;*.png)|(*.BMP;*.bmp;*.JPG;*.jpg;*.GIF;*.gif;*.PNG;*.png)|All File(*.*)|*.* " ;
            OpenFileDialog dialog 
=   new  OpenFileDialog();
            dialog.Filter 
=  ImageFilter;
            dialog.Title 
=   " 请选择图片 " ;
            dialog.RestoreDirectory 
=   true ;
            dialog.InitialDirectory 
=   " D:\\ " ;
            dialog.AddExtension 
=   true ;
            dialog.Multiselect 
=   true ;
            
if  (dialog.ShowDialog()  ==  DialogResult.OK)
            {
                
string [] filenameArray  =  dialog.FileNames;
                
foreach  ( string  filePath  in  filenameArray)
                {
                    
try
                    {
                        
string  temp  =   string .Format( " {0}-{1} " , PatienName, HospitalNo);
                        
string  targetFilePath  =  Path.Combine(pictureRootDir, temp);
                        
// 如果随访日期非空,那么增加一个随访目录(随访(2011-01-01))
                         if  ( ! string .IsNullOrEmpty(SFDate))
                        {
                            targetFilePath 
=  Path.Combine(targetFilePath,  string .Format( " 随访({0}) " , SFDate));
                        }
                        DirectoryUtil.AssertDirExist(targetFilePath);

                        
string  fileName  =  DirectoryUtil.GetFileName(filePath,  false );
                        
string  targetFilenamePath  =  Path.Combine(targetFilePath, fileName);
                        DirectoryUtil.Copy(filePath, targetFilenamePath);

                        PatientPictureInfo info 
=   new  PatientPictureInfo();
                        info.ItemID 
=  ItemID;
                        info.FileName 
=  fileName;
                        info.PicturePath 
=  targetFilenamePath;
                        BLLFactory
< PatientPicture > .Instance.Insert(info);
                    }
                    
catch (Exception ex) 
                    {
                        LogHelper.Error(ex);
                        MessageUtil.ShowTips(ex.Message);
                    }
                }
                BindData();
            }
        } 

以上就是实现的相关逻辑,起主要思路就是为每个字段分配一个独立的GUID,然后新建或者编辑的时候,也要确保GUID的有效性,那样我们把图片存储复制到目录的时候,记录下来的图片地址就可以把它放到数据库记录总,然后查看图片(双击ListVIew选项),就调用图片浏览器显示图片即可。如果为了不让客户安装查看图片工具,也可以自己做一个查看图片的PictureBOx即可。这样就可以实现多个字段多个图片的管理,总体效果还是可以的。



原文链接:http://www.cnblogs.com/wuhuacong/archive/2011/04/17/2019009.html
<无标签>
举报
长平狐
发帖于5年前 0回/65阅
顶部