private void DoSaveRecordContent(object sender, EventArgs e) { frmRecord vFrmRecord = sender as frmRecord; if (!vFrmRecord.EmrView.IsChanged) { MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("未发生变化,确定要执行保存?", "确认操作", messButton); if (dr != DialogResult.OK) { return; } } RecordInfo vRecordInfo = vFrmRecord.Tag as RecordInfo; if (vFrmRecord.EmrView.Trace) { FServerInfo.DateTime = DateTime.Now; HashSet <SectionArea> vAreas = new HashSet <SectionArea> { SectionArea.saPage }; vFrmRecord.TraverseElement(DoTraverseItem, vAreas, TTravTag.WriteTraceInfo | TTravTag.HideTrace); } using (MemoryStream vSM = new MemoryStream()) { vFrmRecord.EmrView.SaveToStream(vSM); if (vRecordInfo.ID > 0) // 修改后保存 { EMRView.emrMSDB.ExecCommandEventHanler vEvent = delegate(SqlCommand sqlComm) { sqlComm.Parameters.AddWithValue("RID", vRecordInfo.ID); sqlComm.Parameters.AddWithValue("LastUserID", UserInfo.ID); sqlComm.Parameters.AddWithValue("content", vSM.GetBuffer()); }; if (emrMSDB.DB.ExecSql(emrMSDB.Sql_SaveRecordContent, vEvent)) { vFrmRecord.EmrView.IsChanged = false; SaveRecordStructure(vRecordInfo.ID, vFrmRecord, false); // 提取并保存病历结构 MessageBox.Show("保存成功!"); } else { MessageBox.Show("保存病历失败,请重试!\n" + emrMSDB.DB.ErrMsg); } } else // 保存新建的病历 { EMRView.emrMSDB.ExecCommandEventHanler vEvent = delegate(SqlCommand sqlComm) { sqlComm.CommandType = CommandType.StoredProcedure; sqlComm.CommandText = "CreateInchRecord"; sqlComm.Parameters.AddWithValue("PatID", PatientInfo.PatID); sqlComm.Parameters.AddWithValue("VisitID", PatientInfo.VisitID); sqlComm.Parameters.AddWithValue("desid", vRecordInfo.DesID); sqlComm.Parameters.AddWithValue("Name", vRecordInfo.RecName); sqlComm.Parameters.AddWithValue("DT", vRecordInfo.DT); sqlComm.Parameters.AddWithValue("DeptID", PatientInfo.DeptID); sqlComm.Parameters.AddWithValue("CreateUserID", UserInfo.ID); sqlComm.Parameters.AddWithValue("Content", vSM.GetBuffer()); //SqlParameter parOutput = sqlComm.Parameters.Add("@RecordID", SqlDbType.Int); //parOutput.Direction = ParameterDirection.Output; SqlParameter parRetrun = new SqlParameter("@RecordID", SqlDbType.Int); parRetrun.Direction = ParameterDirection.ReturnValue; sqlComm.Parameters.Add(parRetrun); sqlComm.ExecuteNonQuery(); vRecordInfo.ID = int.Parse(parRetrun.Value.ToString()); }; if (emrMSDB.DB.ExecStoredProcedure(vEvent)) { vFrmRecord.EmrView.IsChanged = false; SaveRecordStructure(vRecordInfo.ID, vFrmRecord, true); // 提取并保存病历结构 GetPatientRecordListUI(); MessageBox.Show("保存成功!"); } else { MessageBox.Show("保存病历失败,请重试!\n" + emrMSDB.DB.ErrMsg); } } } }
private void 新建ToolStripMenuItem_Click(object sender, EventArgs e) { RecordInfo vRecordInfo = null; int vTemplateID = -1; frmTemplateList vFrmTempList = new frmTemplateList(); vFrmTempList.ShowDialog(); if (vFrmTempList.DialogResult == System.Windows.Forms.DialogResult.OK) { vTemplateID = vFrmTempList.TemplateID; vRecordInfo = new RecordInfo(); vRecordInfo.DesID = vFrmTempList.DesID; vRecordInfo.RecName = vFrmTempList.RecordName; vRecordInfo.DT = vFrmTempList.RecordDateTime; } else { return; } using (MemoryStream vSM = new MemoryStream()) { emrMSDB.DB.GetTemplateContent(vTemplateID, vSM); // 取模板内容(流) TabPage vPage = null; frmRecord vFrmRecord = null; NewPageAndRecord(vRecordInfo, ref vPage, ref vFrmRecord); emrMSDB.DB.GetDataSetElement(vRecordInfo.DesID); if (vSM.Length > 0) // 模板内容不为空 { // 获取当前数据集有哪些数据可以被替换的数据 // 放到本地DataTable:FDataElementSetMacro中 PrepareSyncData(vRecordInfo.DesID); // 赋值模板加载时替换数据元内容的方法 vFrmRecord.EmrView.OnSyncDeItem = DoSyncDeItem; try { vFrmRecord.EmrView.BeginUpdate(); try { // 加载模板,加载过程会调用DoSyncDeItem // 给每一个数据元到FDataElementSetMacro中找 // 自己要替换为什么内容的机会 vFrmRecord.EmrView.LoadFromStream(vSM); // 替换数据组的内容 SyncDeGroupByStruct(vFrmRecord.EmrView); vFrmRecord.EmrView.FormatData(); vFrmRecord.EmrView.IsChanged = true; } finally { vFrmRecord.EmrView.EndUpdate(); } } finally { vFrmRecord.EmrView.OnSyncDeItem = null; } } tabRecord.SelectedTab = vPage; } }