/// <summary> /// 获取需要删除的标签节点 /// </summary> /// <returns></returns> public List <LabelNodeDB> GetlabelNodeDBsNeedToRemove() { List <int> labelIDs = new List <int>(); foreach (var item in dgLabels.SelectedItems) { DBLabelInfo labelInfo = item as DBLabelInfo; labelIDs.Add(labelInfo.ID); } return(accessObj.getLabelNodeDBs(labelIDs)); }
private void CreateAssociation() { //创建连接字符串 String EFConnectionString = DALConfig.getEFConnectionString(curDbInfoTab.dbInfoObject.DatabaseFilePath); string labelnodePath = labeltree.SelectedItem.NodeData.DataItem.Path; string infoNodePath = InfoNodeDataInfoObj.Path; //创建多对多关联时,对信息节点与标签节点在数据库中均存在的,不能直接修改数据库表或实体类,而应该修改关联关系 using (MyDBEntities context = new MyDBEntities(EFConnectionString)) { var infoNode = context.InfoNodeDBs.FirstOrDefault(p => p.Path == infoNodePath); var labelNode = context.LabelNodeDBs.FirstOrDefault(p => p.Path == labelnodePath); if (infoNode != null && labelNode != null) { infoNode.LabelNodeDBs.Add(labelNode); labelNode.InfoNodeDBs.Add(infoNode); //context.LabelNodeDBs.Add(labelNode);//不能再添加了否则数据库中会多出一个ID不同的labelNode // context.InfoNodeDBs.Add(infoNode);//不能再添加了否则数据库中会多出一个ID不同的infoNode int r = context.SaveChanges(); //给标签添加信息绑定 DBInfoNodeInfo infoNodeInfo = new DBInfoNodeInfo() { ID = infoNode.ID, ModifyTime = DateTime.Now, Path = InfoNodeDataInfoObj.Path }; //查找节点 TreeViewIconsItem nodeNeedToAddInfoNode = curDbInfoTab.LabelViewObj.SuperTree.Nodes.FirstOrDefault(n => n.Path == labelnodePath); var dataObj = nodeNeedToAddInfoNode.NodeData.DataItem as LabelNodeDataInfo; //不加入重复的信息节点 if (dataObj.AttachInfoNodeInfos.IndexOf(infoNodeInfo) == -1) { dataObj.AttachInfoNodeInfos.Add(infoNodeInfo); } //给信息添加标签绑定 DBLabelInfo labelInfo = new DBLabelInfo() { ID = labelNode.ID, ModifyTime = DateTime.Now, Path = labelnodePath, // Label = selectedlabel }; if (InfoNodeDataInfoObj.AttachLabels.IndexOf(labelInfo) == -1) { InfoNodeDataInfoObj.AttachLabels.Add(labelInfo); } } } }
/// <summary> /// 仅删除标签与节点的关联并未删除数据库中标签 /// </summary> public void RemoveLabelAssociation() { List <int> labelIDs = new List <int>(); List <DBLabelInfo> labelInfos = new List <DBLabelInfo>(); foreach (var item in dgLabels.SelectedItems) { DBLabelInfo labelInfo = item as DBLabelInfo; labelInfos.Add(labelInfo); labelIDs.Add(labelInfo.ID); } if (labelIDs.Count > 0) { accessObj.DeleteLabelsOfInfoNodeDB(_dataObject.Path, labelIDs); } foreach (var labelInfo in labelInfos) { _dataObject.AttachLabels.Remove(labelInfo); } }
/// <summary> /// 给信息节点添加标签关联,当用户在树中删除信息节点时,信息节点及其关联的“标签关联关系”会删除,但不会删除标签本身。在DataGrid中删除标签时,仅会删除信息节点中的标签关联关系。 /// </summary> private void AddLabelToInfoNode() { //var infoNodeDataObj = SelectedInfoNodeDataObj.DataItem as InfoNodeDataInfo; //var infoNodeAccessObj = SelectedInfoNodeDataObj.AccessObject as InfoNodeAccess; var labelNodeAccessObj = labeltree.SelectedItem.NodeData.AccessObject as LabelNodeAccess; var labelNodeDataObj = labeltree.SelectedItem.NodeData.DataItem as LabelNodeDataInfo; string selectedlabel = labeltree.SelectedItem.HeaderText; DBLabelInfo labelInfo = new DBLabelInfo() { ModifyTime = DateTime.Now, Path = labelNodeDataObj.Path, Label = selectedlabel }; if (InfoNodeDataInfoObj.AttachLabels.IndexOf(labelInfo) == -1) { LabelNodeDB labelNodeDB = labelNodeAccessObj.GetLabelNodeDBWithoutInfoNodeDBsByPath(labelNodeDataObj.Path); //根据选中的信息节点的路径将标签添加到数据库中信息节点关联的标签集合中,仅进行信息节点与标签之间的关联添加,并不创建标签。 InfoNodeAccessObj.AddLabelAssociation(InfoNodeDataInfoObj.Path, labelInfo, labelNodeDB); InfoNodeDataInfoObj.AttachLabels.Add(labelInfo); } }
/// <summary> /// 添加标签关联关系 /// </summary> /// <param name="labelInfo"></param> /// <param name="labeldb"></param> public void AddLabelAssociation(string nodePath, DBLabelInfo labelInfo, LabelNodeDB labeldb) { repository.AddLabelOfInfoNodeDB(nodePath, labeldb); //将ID传回,注意此ID与原labeldb是不一样的,所以添加关联实际会在数据库中新增一个内容一样但ID不一样的对象。 labelInfo.ID = labeldb.ID; }