private void PrepareTableRecherche() { lock ( m_datasetRecherche ) { if (m_datasetRecherche.Tables[m_typeObjets.ToString()] != null) { m_datasetRecherche.Tables.Remove(m_typeObjets.ToString()); } DataTable newTable = new DataTable(m_typeObjets.ToString()); m_datasetRecherche.Tables.Add(newTable); CObjetHierarchique objet = (CObjetHierarchique)Activator.CreateInstance(m_typeObjets, new object[] { CSc2iWin32DataClient.ContexteCourant }); newTable.Columns.Add(objet.ChampLibelle, typeof(string)).MaxLength = 16000; newTable.Columns.Add(c_champLibelleTotal, typeof(string)).MaxLength = 16000; newTable.Columns.Add(objet.GetChampId(), typeof(int)); CListeObjetsDonnees liste = new CListeObjetsDonnees(CSc2iWin32DataClient.ContexteCourant, m_typeObjets); liste.Tri = objet.ChampNiveau + "," + objet.ChampLibelle; foreach (CObjetHierarchique objetH in liste) { DataRow row = newTable.NewRow(); row[objetH.GetChampId()] = objetH.Id; row[objetH.ChampLibelle] = RemoveAccents(objetH.Libelle); row[c_champLibelleTotal] = RemoveAccents(GetLibelleComplet(objetH)); newTable.Rows.Add(row); } } }
private void m_btnSupprimer_LinkClicked(object sender, EventArgs e) { if (m_lastNode.Tag != null) { if (m_lastNode.Tag is CObjetHierarchique) { if (CFormAlerte.Afficher( I.T("Delete selected element and all its childs ?|109"), EFormAlerteType.Question) == DialogResult.Yes) { CObjetHierarchique objet = (CObjetHierarchique)m_lastNode.Tag; ArrayList lst = new ArrayList(); lst.Add(objet); CResultAErreur result = m_gestionnaireArbre.Supprimer(lst); if (!result) { CFormAlerte.Afficher(result.Erreur); } else { m_lastNode.Remove(); RefreshListe(); } } } } }
//---------------------------------------------------------------------------- private void m_arbre_AfterExpand(object sender, TreeViewEventArgs e) { TreeNode node = e.Node; if (node.Nodes.Count > 0 && node.Nodes[0].Tag == null) { //il faut reremplir ce noeud node.Nodes.Clear(); CListeObjetsDonnees listeObjets = null; listeObjets = ((CObjetHierarchique)node.Tag).ObjetsFils; if (listeObjets != null) { foreach (CObjetHierarchique objet in listeObjets) { TreeNode newNode = CreateNode(objet); node.Nodes.Add(newNode); CObjetHierarchique objetThis = null; objetThis = m_elementAReaffecter; if (objet.CodeSystemeComplet.Length > objetThis.CodeSystemeComplet.Length && objet.CodeSystemeComplet.Substring(0, objetThis.CodeSystemeComplet.Length) == objetThis.CodeSystemeComplet) { node.Expand(); } } } } }
public static bool ReaffecteObjet(CObjetHierarchique element) { CFormReaffecteObjetHierarchique form = new CFormReaffecteObjetHierarchique(); form.m_typeObjets = element.GetType(); form.m_elementAReaffecter = element; bool bResult = false; if (form.ShowDialog() == DialogResult.OK) { TreeNode node = form.m_arbre.SelectedNode; if (node != null) { CObjetHierarchique parentDemande = (CObjetHierarchique)node.Tag; element.ObjetParent = (CObjetHierarchique)node.Tag; if (parentDemande != null && !parentDemande.Equals(element.ObjetParent)) { CFormAlerte.Afficher(I.T("The system cannot reaffect the element|30115"), EFormAlerteType.Erreur); } else { bResult = true; } } } return(bResult); }
//-------------------------------------------------- private string GetChampNiveau() { CContexteDonnee contexteDonnee = sc2i.win32.data.CSc2iWin32DataClient.ContexteCourant; CObjetHierarchique objet = (CObjetHierarchique)Activator.CreateInstance(GetTypeElements(), new object[] { contexteDonnee }); string strChampNiveau = objet.ChampNiveau; return(strChampNiveau); }
//----------------------------------------------------------------- private void m_wndListe_ItemClick(ListViewItem item) { CObjetHierarchique obj = item != null ? item.Tag as CObjetHierarchique : null; if (obj != null) { CSc2iWin32DataNavigation.Navigateur.EditeElement(obj, false, ""); Close(); } }
private void AfficheElement() { TreeNode node = m_arbre.SelectedNode; if (node == null) { return; } CObjetHierarchique objet = (CObjetHierarchique)node.Tag; AfficheElement(objet); }
//---------------------------------------------------------------------------- private TreeNode CreateNode(CObjetHierarchique objet) { TreeNode node = new TreeNode(objet.Libelle); node.Tag = objet; if (objet.ObjetsFils.Count != 0) { TreeNode dummy = new TreeNode(""); dummy.Tag = null; node.Nodes.Add(dummy); } return(node); }
private void m_arbre_DoubleClick(object sender, EventArgs e) { TreeNode item = m_arbre.SelectedNode; if (item != null && item.Tag is CObjetHierarchique) { ObjetSelectionne = (CObjetHierarchique)item.Tag; if (m_arbre != null) { m_arbre.Hide(); } } }
//---------------------------------------------------------- void link_Click(object sender, EventArgs e) { LinkLabel label = sender as LinkLabel; if (label != null) { CObjetHierarchique objet = label.Tag as CObjetHierarchique; if (objet != null) { CSc2iWin32DataNavigation.Navigateur.EditeElement(objet, false, ""); } } }
public void Init(CObjetHierarchique objetRacine) { m_gestionnaireArbre = new CGestionnaireAjoutModifSuppObjetDonnee(GetTypeElements(), GetTypeFormEdition()); m_gestionnaireArbre.OnNewObjetDonnee += new OnNewObjetDonneeEventHandler(AfterCreateObjet); m_objetRacine = objetRacine; if (m_objetRacine != null) { panel1.Visible = false; } UpdateVisibiliteControles(); RefreshListe(); RefreshArbre(); }
private void AfterCreateObjet(object sender, CObjetDonnee args, ref bool bCancel) { if (m_lastNode != null) { CObjetHierarchique objet = (CObjetHierarchique)args; if (m_lastNode.Tag is CObjetHierarchique) { objet.ObjetParent = (CObjetHierarchique)m_lastNode.Tag; } } if (AfterCreateObjetEvent != null) { CObjetDonneeEventArgs objArgs = new CObjetDonneeEventArgs((CObjetDonnee)args); AfterCreateObjetEvent(this, objArgs); } }
//------------------------------------------------------------------- private void m_iconModifier_Click(object sender, EventArgs e) { CObjetHierarchique objetH = m_objetHierarchique as CObjetHierarchique; if (objetH != null) { if (CFormReaffecteObjetHierarchique.ReaffecteObjet(objetH)) { Init(m_objetHierarchique); if (OnChangeObjetParent != null) { OnChangeObjetParent(this, new EventArgs()); } } } }
public static CObjetHierarchique[] SelectObjets( Type typeObjet, CObjetHierarchique racine, CObjetHierarchique[] listeSelectionnees) { CFormSelectObjetHierarchique form = new CFormSelectObjetHierarchique(); form.m_racine = racine; form.m_typeObjets = typeObjet; form.m_arbre.CheckBoxes = true; form.m_listeChecked = new List <CObjetHierarchique>(listeSelectionnees); CObjetHierarchique[] retour = null; if (form.ShowDialog() == DialogResult.OK) { retour = form.GetObjetsSelectionnes().ToArray(); } form.Dispose(); return(retour); }
public static CObjetHierarchique SelectObjet(Type typeObjet, CObjetHierarchique racine) { CFormSelectObjetHierarchique form = new CFormSelectObjetHierarchique(); form.m_racine = racine; form.m_typeObjets = typeObjet; CObjetHierarchique objetSel = null; if (form.ShowDialog() == DialogResult.OK) { TreeNode node = form.m_arbre.SelectedNode; if (node != null) { objetSel = (CObjetHierarchique)node.Tag; } } form.Dispose(); return(objetSel); }
private void m_txtFiltre_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { int nCode = 0; if ((e.Modifiers & Keys.Control) == Keys.Control) { nCode = (int)e.KeyCode - (int)Keys.NumPad0; if (nCode <= 0 || nCode > 9) { nCode = (int)e.KeyCode - (int)Keys.D0; } } if (e.KeyCode == Keys.Enter) { nCode = 1; } if (nCode > 0 && nCode <= 9) { if (m_tableClavierToObjet[nCode] != null) { CObjetHierarchique objet = (CObjetHierarchique)m_tableClavierToObjet[nCode]; TreeNode node = (TreeNode)m_tableObjetToNode[objet]; if (node.Nodes.Count > 0 && !node.IsExpanded) { node.Expand(); } else { ObjetSelectionne = objet; if (m_arbre.Visible) { m_arbre.Hide(); } } e.Handled = true; } } if (e.KeyCode == Keys.Tab && m_arbre != null) { m_arbre.Focus(); } }
//------------------------------------------------------------------- private static void AlloueCode(CObjetHierarchique objet, ref int nLastCodeAlloue) { CFiltreData filtre = null; if (objet.ObjetParent != null) { filtre = new CFiltreData(objet.ChampIdParent + "=@1", objet.ObjetParent.Id); } else { filtre = new CFiltreData(objet.ChampIdParent + " is null and " + objet.ChampCodeSystemePartiel + ">@1", GetCle(nLastCodeAlloue, objet.NbCarsParNiveau)); } CListeObjetsDonnees listeSoeurs = new CListeObjetsDonnees(objet.ContexteDonnee, objet.GetType(), filtre); listeSoeurs.AssureLectureFaite(); listeSoeurs.InterditLectureInDB = true; Hashtable tableCodesUtilises = new Hashtable(); foreach (CObjetHierarchique obj in listeSoeurs) { tableCodesUtilises[obj.CodeSystemePartiel] = true; } //Cherche le prochain numéro libre int nCpt = nLastCodeAlloue; string strCle = ""; do { nCpt++; strCle = GetCle(nCpt, objet.NbCarsParNiveau); /*listeSoeurs.Filtre = new CFiltreData(objet.ChampCodeSystemePartiel + "=@1", * strCle);*/ }while (tableCodesUtilises.ContainsKey(strCle)); nLastCodeAlloue = nCpt; objet.ChangeCodePartiel(strCle); }
//---------------------------------------------------------------------------- private void CFormSelectObjetHierarchique_Load(object sender, EventArgs e) { CWin32Traducteur.Translate(this); CListeObjetsDonnees liste; if (m_racine == null) { liste = new CListeObjetsDonnees(CSc2iWin32DataClient.ContexteCourant, m_typeObjets); CObjetHierarchique objetTmp = (CObjetHierarchique)Activator.CreateInstance(m_typeObjets, new object[] { CSc2iWin32DataClient.ContexteCourant }); liste.Filtre = new CFiltreData(objetTmp.ChampNiveau + "=@1", 0); } else { liste = new CListeObjetsDonnees(CSc2iWin32DataClient.ContexteCourant, m_typeObjets); liste.Filtre = new CFiltreData(m_racine.GetChampId() + "=@1", m_racine.Id); } foreach (CObjetHierarchique objet in liste) { TreeNode node = CreateNode(objet); m_arbre.Nodes.Add(node); node.Expand(); } if (m_listeChecked != null) { foreach (CObjetHierarchique objet in m_listeChecked) { TreeNode node = GetNode(objet); if (node != null) { node.Checked = true; node = node.Parent; while (node != null) { node.Expand(); node = node.Parent; } } } } }
private void FillChilds(TreeNode nodeParent) { CObjetHierarchique objet = (CObjetHierarchique)nodeParent.Tag; if (nodeParent.Nodes.Count == 1 && nodeParent.Nodes[0].Tag == null) { nodeParent.Nodes.Clear(); } foreach (CObjetHierarchique objetFille in objet.ObjetsFils) { TreeNode node = new TreeNode(objetFille.Libelle); node.Tag = objetFille; nodeParent.Nodes.Add(node); if (objetFille.ObjetsFils.Count > 0) { TreeNode nodeTmp = new TreeNode(""); nodeTmp.Tag = null; node.Nodes.Add(nodeTmp); } } }
//---------------------------------------------------------------------------- private TreeNode CreateNode(CObjetHierarchique objet) { TreeNode node = new TreeNode(objet.Libelle); node.Tag = objet; m_tableObjetToNode[objet] = node; if (m_listeChecked != null) { if (m_listeChecked.Contains(objet)) { node.Checked = true; } } if (objet.ObjetsFils.Count != 0) { TreeNode dummy = new TreeNode(""); dummy.Tag = null; node.Nodes.Add(dummy); } return(node); }
//------------------------------------------------------------------- public static CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte, string strNomTable) { CResultAErreur result = CResultAErreur.True; if (!result) { return(result); } DataTable table = contexte.Tables[strNomTable]; ArrayList lstRows = new ArrayList(table.Rows); CObjetHierarchique objet = (CObjetHierarchique)Activator.CreateInstance(CContexteDonnee.GetTypeForTable(strNomTable), new object[] { contexte }); lstRows.Sort(new CRowSorterSurParent(objet.ChampIdParent)); object lastParent = DBNull.Value; int nLastCode = 0; foreach (DataRow row in lstRows) { //Allocation du code famille objet = (CObjetHierarchique)Activator.CreateInstance(CContexteDonnee.GetTypeForTable(strNomTable), new object[] { row }); if (objet.Row.RowState != DataRowState.Deleted && (objet.CodeSystemePartiel == objet.CodePartielDefaut || HasChange(objet, objet.ChampIdParent))) { if (!objet.Row[objet.ChampIdParent].Equals(lastParent)) { nLastCode = 0; lastParent = objet.Row[objet.ChampIdParent]; } AlloueCode(objet, ref nLastCode); } } return(result); }
//---------------------------------------------------------------------------- private TreeNode GetNode(CObjetHierarchique objet) { TreeNode node = (TreeNode)m_tableObjetToNode[objet]; if (node != null) { return(node); } node = CreateNode(objet); if (objet.ObjetParent == null) { m_arbre.Nodes.Add(node); node.Expand(); return(node); } TreeNode nodeParent = GetNode(objet); if (nodeParent != null) { nodeParent.Expand(); return((TreeNode)m_tableObjetToNode[objet]); } return(null); }
private void m_corbeille_Click(object sender, System.EventArgs e) { ObjetSelectionne = null; }
public void AfficheHierarchie(CObjetHierarchique elementFeuille) { m_arbre.Nodes.Clear(); m_feuille = elementFeuille; TreeNode node = FillNodesParent(elementFeuille); }
private void RemplitArbre(bool bForcer) { ArrayList liste = new ArrayList(); int nNiveauMax = 0; lock ( m_datasetRecherche ) { DataTable tableRecherche = m_datasetRecherche.Tables[m_typeObjets.ToString()]; if (tableRecherche == null) { PrepareTableRecherche(); } tableRecherche = m_datasetRecherche.Tables[m_typeObjets.ToString()]; if (m_txtFiltre.Text.Trim().Length < 3 && !bForcer) { return; } m_tableObjetToClavier.Clear(); m_tableClavierToObjet.Clear(); //Extrait les mots du filtre string[] strValeurs = RemoveAccents(m_txtFiltre.Text).Split(' '); if (strValeurs.Length == 0) { return; } string strFiltreSurTotal = ""; string strFiltreSurLibelle = ""; CObjetHierarchique objet = (CObjetHierarchique)Activator.CreateInstance(m_typeObjets, new object[] { CSc2iWin32DataClient.ContexteCourant }); foreach (string strValeur in strValeurs) { if (strValeur.Trim().Length > 0) { if (strFiltreSurLibelle.Length > 0) { strFiltreSurLibelle += " and "; } strFiltreSurLibelle += "(" + objet.ChampLibelle + " like " + "'" + strValeur.Trim() + "%' or " + objet.ChampLibelle + " like '% " + strValeur.Trim() + "%' or " + objet.ChampLibelle + " like '%/" + strValeur.Trim() + "%')"; if (strFiltreSurTotal.Length > 0) { strFiltreSurTotal += " and "; } strFiltreSurTotal += "(" + c_champLibelleTotal + " like " + "'" + strValeur.Trim() + "%' or " + c_champLibelleTotal + " like '% " + strValeur.Trim() + "%' or " + c_champLibelleTotal + " like '%/" + strValeur.Trim() + "%')"; } } DataRow[] rows = tableRecherche.Select(strFiltreSurLibelle); Hashtable tableContenantSurLibelle = new Hashtable(); foreach (DataRow row in rows) { tableContenantSurLibelle[row[objet.GetChampId()]] = true; } rows = tableRecherche.Select(strFiltreSurTotal); Hashtable tableCodes = new Hashtable(); Hashtable tableNbFils = new Hashtable(); Hashtable tableQuiNeContientPasDirectement = new Hashtable(); foreach (DataRow row in rows) { CObjetHierarchique objetType = (CObjetHierarchique)Activator.CreateInstance(m_typeObjets, new object[] { CSc2iWin32DataClient.ContexteCourant }); if (objetType.ReadIfExists((int)row[objetType.GetChampId()])) { liste.Add(objetType); tableCodes[objetType.CodeSystemeComplet] = 0; string strFamP = objetType.CodeSystemeComplet.Substring(0, objetType.CodeSystemeComplet.Length - objetType.NbCarsParNiveau); if (strFamP != "" && tableContenantSurLibelle.Contains(objetType.Id)) { if (!tableNbFils.Contains(strFamP)) { tableNbFils[strFamP] = 1; } else { tableNbFils[strFamP] = (int)tableNbFils[strFamP] + 1; } } } } //Enlève de la liste les sous familles des familles sélectionnées ArrayList lstNew = new ArrayList(); foreach (CObjetHierarchique objetTmp in liste) { string strCodeFamille = objetTmp.CodeSystemeComplet.Substring(0, objetTmp.CodeSystemeComplet.Length - objetTmp.NbCarsParNiveau); bool bSupprimer = false; while (strCodeFamille != "" && !bSupprimer) { object nbChilds = tableNbFils[strCodeFamille]; if (tableCodes.Contains(strCodeFamille) && ((nbChilds != null && (int)nbChilds > 1) || !tableContenantSurLibelle.Contains(objetTmp.Id))) { bSupprimer = true; } strCodeFamille = strCodeFamille.Substring(0, strCodeFamille.Length - objet.NbCarsParNiveau); } if (!bSupprimer) { lstNew.Add(objetTmp); if (objetTmp.Niveau > nNiveauMax) { nNiveauMax = objetTmp.Niveau; } } } liste = lstNew; } m_tableObjetToNode = new Hashtable(); if (liste.Count != 0) { if (m_arbre == null) { Form frm = FindForm(); if (frm == null) { return; } Point pt = PointToScreen(m_txtFiltre.Location); pt.Y += m_txtFiltre.Height; pt = frm.PointToClient(pt); m_arbre = new TreeView(); m_arbre.Parent = frm; m_arbre.Location = pt; m_arbre.Size = new Size(Size.Width, HeightDeplie); m_arbre.CreateControl(); m_arbre.DoubleClick += new EventHandler(m_arbre_DoubleClick); m_arbre.Leave += new EventHandler(CControleSelectionObjetHierarchique_Leave); m_arbre.BeforeExpand += new TreeViewCancelEventHandler(m_arbre_BeforeExpand); } m_arbre.BeginUpdate(); m_arbre.Nodes.Clear(); m_arbre.BringToFront(); m_arbre.Visible = true; } else if (m_arbre != null) { m_arbre.Nodes.Clear(); } int n = 1; foreach (CObjetHierarchique objet in liste) { if (n < 10) { m_tableObjetToClavier[objet] = n; m_tableClavierToObjet[n] = objet; } n++; AddObjet(objet, m_tableObjetToNode, true, nNiveauMax); } if (m_arbre != null) { m_arbre.EndUpdate(); } }