作者:李坤凤
本次任务完成时间:2020年5月07日
开发工具与关键技术:开发工具:Visual Studio 关键技术:树形的选中事件
1、查询树形,通过获取Id查询出所需要的数据
private List<Node> GetNodeList()
{
List<Node> TwoNodes = new List<Node>();//第二层节点列表
List<Node> ThreeNodes = new List<Node>();//第三层节点列表
int intWardID = 0;
//二级节点:查询病区信息
var wards = myModel.B_Ward.OrderBy(c => c.WardID).ToList();
for (int i = 0; i < wards.Count(); i++)
{
//三级节点:查询病区住院病人
intWardID = wards[i].WardID;
var mypatiens = (from Behospitalized in myModel.B_Behospitalized
join Patient in myModel.B_Patient on Behospitalized.PatientID equals Patient.PatientID
join Bed in myModel.B_Bed on Behospitalized.BedID equals Bed.BedID
join Sex in myModel.D_AttributeDetails on Patient.A_Sex equals Sex.AttributeDetailsID
where Behospitalized.Effect == true && Bed.State == 2 //
orderby Bed.BedID ascending//
where Behospitalized.WardID == intWardID
select new Behospitalizeds
{
BehospitalizedID = Behospitalized.BehospitalizedID,
PatientID = Behospitalized.PatientID,
BedID = Behospitalized.BedID,
InpatientNumber = Behospitalized.InpatientNumber,
PatientName = Patient.PatientName,
Sex = Sex.DetailsName,
Bed = Bed.BedName
}).ToList();
ThreeNodes = new List<Node>();//每次进来的都要实例化一下子节点
for (int j = 0; j < mypatiens.Count; j++)
{
//遍历生成病区节点
Node twoLevelNode = new Node();
twoLevelNode.NodeId = mypatiens[j].PatientID.ToString();
twoLevelNode.NodeName = mypatiens[j].PatientName + "(" + mypatiens[j].Sex + ")" + mypatiens[j].Bed;
twoLevelNode.NodeContent = mypatiens[j].InpatientNumber;
twoLevelNode.NodeType = NodeType.LeafNode;
twoLevelNode.Nodes = new List<Node>();
twoLevelNode.Icon = "/../../Images/Main/offline_user.ico";
ThreeNodes.Add(twoLevelNode);
}
//遍历生成病区节点
Node firstLevelNode = new Node();
firstLevelNode.NodeName = wards[i].WardName;
firstLevelNode.NodeContent = wards[i].WardName;
firstLevelNode.NodeType = NodeType.LeafNode;
firstLevelNode.Nodes = ThreeNodes;//把三级节点病人信息添加到二级节点
firstLevelNode.Icon = "/../../Images/HospitalWork/png-0522.png";
TwoNodes.Add(firstLevelNode);
}
return new List<Node>()
{
//二级节点:住院病人一览表
new Node()
{
NodeName ="住院病人一览表",
NodeContent = " 住院病人一览表",
NodeType = NodeType.RootNode,
Nodes = TwoNodes,//
Icon ="/../../Images/HospitalWork/png-0522.png",
}
};
}
2、绑定节点数据
private void ExpandTree()
{
if (this.TreeView_Patient.Items !=null && this.TreeView_Patient.Items.Count > 0)
{
foreach (var item in this.TreeView_Patient.Items)
{
DependencyObject dependencyObject = this.TreeView_Patient.ItemContainerGenerator.ContainerFromItem(item);
if (dependencyObject !=null)//第一次打开程序dependencyObject为null,会出错
{
((TreeViewItem)dependencyObject).ExpandSubtree();
}
}
}
}
private void SelectTheCurrentNode()
{
if (this.TreeView_Patient.Items !=null && this.TreeView_Patient.Items.Count > 0)
{
foreach (var item in this.TreeView_Patient.Items)
{
DependencyObject dependencyObject = this.TreeView_Patient.ItemContainerGenerator.ContainerFromItem(item);
if (dependencyObject != null)
{
TreeViewItem tvi = (TreeViewItem)dependencyObject;
if ((tvi.Header as Node).NodeId== selectedNode.NodeId)
{
tvi.IsSelected = true;
tvi.Focus();
}
else
{
SetNodeSelected(tvi);
}
}
}
}
}
//SetNodeSelected
private void SetNodeSelected(TreeViewItem Item)
{
foreach (var item in Item.Items)
{
DependencyObject dependencyObject = Item.ItemContainerGenerator.ContainerFromItem(item);
if (dependencyObject != null)
{
TreeViewItem treeViewItem = (TreeViewItem)dependencyObject;
if ((treeViewItem.Header as Node).NodeId == selectedNode.NodeId)
{
treeViewItem.IsSelected = true;
treeViewItem.Focus();
}
else
{
treeViewItem.IsSelected = false;
if (treeViewItem.HasItems)
{
SetNodeSelected(treeViewItem);
}
}
}
}
}
3、树形节点选中项改变事件
private void TreeView_Patient_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
//实例化当前选择的树形控件
Node node = this.TreeView_Patient.SelectedItem as Node;
//获取当前选中的病人信息
selectedNode = node;
//获取病人信息里面的入院ID
try
{
btnBookKeepingBag.IsEnabled = true;
btnBookKeepingBag.Opacity = 1;
btnUpdate.IsEnabled = true;
btnUpdate.Opacity = 1;
btnUInpatientNumber.IsEnabled = true;
btnUInpatientNumber.Opacity = 1;
intPatientId = Convert.ToInt32(selectedNode.NodeId);
//查询病人基本信息
var dbPatient = (from tbPatient in myModel.B_Patient
join tbBehospitalized in myModel.B_Behospitalized on tbPatient.PatientID equals tbBehospitalized.PatientID
join tbInsurance in myModel.B_Insurance on tbPatient.PatientID equals tbInsurance.PatientID
where tbPatient.PatientID == intPatientId && tbInsurance.Effect == true
select new PatientEntitys
{
PatientID = tbPatient.PatientID,
PatientName = tbPatient.PatientName,
PatientIDCard = tbPatient.PatientIDCard,
A_Sex = tbPatient.A_Sex,
Age = tbPatient.Age,
Birthday = tbPatient.Birthday,
A_NationalityID = tbPatient.A_NationalityID,
A_NationID = tbPatient.A_NationID,
IdAddress = tbPatient.IdAddress,
A_MaritalStatusID = tbPatient.A_MaritalStatusID,
MobilePhone = tbPatient.MobilePhone,
ContactAddress = tbPatient.ContactAddress,
Contacts = tbPatient.Contacts,
Occupation = tbPatient.Occupation,
Guarantor = tbPatient.Guarantor,
Unit = tbPatient.Unit,
UnitCode = tbPatient.UnitCode,
UnitPhone = tbPatient.UnitPhone,
Relationship = tbPatient.Relationship,
PhoneNumber = tbPatient.PhoneNumber,
Postcode = tbPatient.Postcode,
Spell = tbPatient.Spell,
Wubi = tbPatient.Wubi,
InsuranceID = tbInsurance.InsuranceID,
CardNumber = tbInsurance.CardNumber,//医保卡号
A_CarTypeID = tbInsurance.A_CarTypeID,
A_ChargeTypeID = tbInsurance.A_ChargeTypeID,
DistrictCode = tbInsurance.DistrictCode,
InseranceUnit = tbInsurance.Unit,
CertificateNumber = tbInsurance.CertificateNumber,
MedicalProgramID = tbInsurance.MedicalProgramID,
CertificatDiagnosis = tbInsurance.CertificatDiagnosis,
StartDate = tbInsurance.StartDate,
EndDate = tbInsurance.EndDate,
JUnit = tbInsurance.Unit,
InpatientNumber = tbBehospitalized.InpatientNumber,
A_PatientTypeID = tbBehospitalized.A_PatientTypeID,
WardID = tbBehospitalized.WardID,
}).FirstOrDefault();
//患者信息回填
txtAge.Text = dbPatient.Age;
txtCertificatDiagnosis.Text = dbPatient.CertificatDiagnosis;
txtCertificateNumber.Text = dbPatient.CertificateNumber;
txtContactAddress.Text = dbPatient.ContactAddress;
txtContacts.Text = dbPatient.Contacts;
txtDistrictCode.Text = dbPatient.DistrictCode;
txtIdAddress.Text = dbPatient.IdAddress;
txtIdCard.Text = dbPatient.PatientIDCard;
txtInpatientNumber.Text = dbPatient.InpatientNumber;
txtMedicalCard.Text = dbPatient.CardNumber;
txtOccupation.Text = dbPatient.Occupation;
txtPatientName.Text = dbPatient.PatientName;
txtPhoneNumber.Text = dbPatient.PhoneNumber;
txtUnit.Text = dbPatient.Unit;
txtYouBian.Text = dbPatient.Postcode;
txtSpell.Text = dbPatient.Spell;
txtUnitPhone.Text = dbPatient.UnitPhone;
txtWubi.Text = dbPatient.Wubi;
txtSBCardNumber.Text = dbPatient.CardNumber;
dtpStartDate.Text = dbPatient.StartDate.ToString();
dtpEndDate.Text = dbPatient.EndDate.ToString();
cboSex.SelectedValue = dbPatient.A_Sex;
cboMaritalStatus.SelectedValue = dbPatient.A_MaritalStatusID;
cboNationality.SelectedValue = dbPatient.A_NationalityID;
cboCarType.SelectedValue = dbPatient.A_CarTypeID;
cboChargeType.SelectedValue = dbPatient.A_ChargeTypeID;
cboMedicalProgram.SelectedValue = dbPatient.MedicalProgramID;
cboPatientType.SelectedValue = dbPatient.A_PatientTypeID;
txtJUnit.Text = dbPatient.JUnit;//记账单位
intWardId = Convert.ToInt32(dbPatient.WardID);//病区ID
if (Convert.ToInt32(cboNationality.SelectedValue) == 32)//选中中国
{
cboNation.IsEnabled = true;
//民族
var nations = myModel.D_AttributeDetails.Where(g => g.AttributeID == 7)
.OrderBy(g => g.AttributeDetailsID).ToList();
cboNation.ItemsSource = nations;
cboNation.DisplayMemberPath = "DetailsName";
cboNation.SelectedValuePath = "AttributeDetailsID";
cboNation.SelectedValue = dbPatient.A_NationID; ;//民族
}
else
{
cboNation.ItemsSource = null;
cboNation.IsEnabled = false;
}
}
catch (Exception)
{
EmptyControls();
return;
}
}
4、效果示意图