//--------------------------------------------- private void ShowProprietes(CObjetDonneeAIdNumerique objet) { if (objet == null) { m_grilleProprietes.DataSource = null; return; } DataTable table = new DataTable(); m_strColChamp = I.T("Field|120"); m_strColValeurHistorique = I.T("History|121"); m_strColValeurCourante = I.T("Current|122"); DataColumn col = new DataColumn(m_strColChecked, typeof(bool)); col.Caption = ""; table.Columns.Add(col); table.Columns.Add(m_strColChamp); if (m_version.TypeVersion.Code != CTypeVersion.TypeVersion.Previsionnelle) { table.Columns.Add(m_strColValeurHistorique); } table.Columns.Add(m_strColValeurCourante); if (m_version.TypeVersion.Code == CTypeVersion.TypeVersion.Previsionnelle) { m_strColValeurHistorique = I.T("Version|123"); table.Columns.Add(m_strColValeurHistorique); } table.Columns.Add(m_strColObjetHistorique, typeof(IChampPourVersion)); CValeursHistorique valeurs = GetValeursHistorique(objet); m_valeursAffichees = valeurs; m_objetAffiche = objet; CStructureTable structure = CStructureTable.GetStructure(objet.GetType()); foreach (CInfoChampTable champ in structure.Champs) { if (champ.Propriete != "") { DataRow row = table.NewRow(); row[m_strColChecked] = false; row[m_strColChamp] = champ.NomConvivial; row[m_strColObjetHistorique] = DBNull.Value; if (champ.TypeDonnee == typeof(CDonneeBinaireInRow)) { CDonneeBinaireInRow donnee = new CDonneeBinaireInRow(objet.ContexteDonnee.IdSession, objet.Row.Row, champ.NomChamp); row[m_strColValeurCourante] = donnee.Donnees; } else { row[m_strColValeurCourante] = objet.Row[champ.NomChamp]; } CChampPourVersionInDb champVersion = new CChampPourVersionInDb(champ.NomChamp, champ.NomConvivial); if (valeurs.ContainsKey(champVersion)) { row[m_strColObjetHistorique] = champVersion; object val = valeurs[champVersion]; if (val == null) { row[m_strColValeurHistorique] = DBNull.Value; } else { row[m_strColValeurHistorique] = val.ToString(); } } else { row[m_strColValeurHistorique] = objet.Row[champ.NomChamp]; } table.Rows.Add(row); } } //Champs custom if (objet is IElementAChamps) { Dictionary <CChampCustom, bool> lstChamps = new Dictionary <CChampCustom, bool>(); foreach (IDefinisseurChampCustom definisseur in ((IElementAChamps)objet).DefinisseursDeChamps) { foreach (CChampCustom champ in definisseur.TousLesChampsAssocies) { if (champ.TypeDonneeChamp.TypeDonnee != TypeDonnee.tObjetDonneeAIdNumeriqueAuto) { lstChamps[champ] = true; } } } foreach (CChampCustom champCustom in lstChamps.Keys) { DataRow row = table.NewRow(); row[m_strColChecked] = false; row[m_strColChamp] = champCustom.LibelleConvivial; row[m_strColObjetHistorique] = DBNull.Value; row[m_strColValeurCourante] = ((IElementAChamps)objet).GetValeurChamp(champCustom.Id); CChampCustomPourVersion chVersion = new CChampCustomPourVersion(champCustom); if (valeurs.ContainsKey(chVersion)) { row[m_strColObjetHistorique] = chVersion; object val = valeurs[chVersion]; if (val == null) { row[m_strColValeurHistorique] = DBNull.Value; } else { row[m_strColValeurHistorique] = val.ToString(); } } else { row[m_strColValeurHistorique] = row[m_strColValeurCourante]; } table.Rows.Add(row); } } table.DefaultView.Sort = m_strColChamp; m_grilleProprietes.DataSource = table; m_grilleProprietes.ReadOnly = false; m_grilleProprietes.Columns[0].Width = 32; foreach (DataGridViewColumn colTmp in m_grilleProprietes.Columns) { colTmp.ReadOnly = true; } m_grilleProprietes.Columns[0].ReadOnly = false; if (!m_bCanRestore) { m_grilleProprietes.Columns[0].Visible = false; } m_grilleProprietes.Columns[m_grilleProprietes.Columns.Count - 1].Visible = false; }
private void m_arbreObjet_BeforeExpand(object sender, TreeViewCancelEventArgs e) { using (CWaitCursor waiter = new CWaitCursor()) { if (e.Node.Nodes.Count != 1 || e.Node.Nodes[0].Tag != DBNull.Value) { return; //C'est un vrai noeud, on ne remplit pas } e.Node.Nodes.Clear(); if (e.Node.Tag is CObjetDonneeAIdNumerique) { CObjetDonneeAIdNumerique objet = (CObjetDonneeAIdNumerique)e.Node.Tag; CValeursHistorique valeursHistoriques = GetValeursHistorique(objet); CStructureTable structure = CStructureTable.GetStructure(objet.GetType()); #region relations parentes //traitement des relations parentes foreach (CInfoRelation relation in structure.RelationsParentes) { Type tpParent = CContexteDonnee.GetTypeForTable(relation.TableParente); if (typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(tpParent) && relation.Propriete != "") { int nImage = c_nImageUnchanged; object newValeur = objet.Row[relation.ChampsFille[0]]; if (newValeur == null) //Pour éviter les problèmes de null { newValeur = DBNull.Value; } object oldValeur = newValeur; //Cherche si la valeur pour cette version a changé CChampPourVersionInDb champ = new CChampPourVersionInDb(relation.ChampsFille[0], relation.ChampsFille[0]); if (valeursHistoriques.ContainsKey(champ)) { oldValeur = valeursHistoriques[champ]; if (!newValeur.Equals(oldValeur)) { nImage = c_nImageEdit; } } TreeNode node = new TreeNode(relation.NomConvivial); node.Tag = relation; node.ImageIndex = nImage; node.SelectedImageIndex = nImage; e.Node.Nodes.Add(node); //Ajoute la valeur actuelle CObjetDonneeAIdNumerique parent = (CObjetDonneeAIdNumerique)objet.GetParent(relation.ChampsFille[0], tpParent); TreeNode nodeParent = CreateNodeObjet(node.Nodes, parent); nodeParent.StateImageIndex = c_nImageActuel; //Ajoute valeur historique if (!newValeur.Equals(oldValeur)) { parent = null; nodeParent = null; if (oldValeur is int) { //récupère l'ancien parent parent = (CObjetDonneeAIdNumerique)Activator.CreateInstance(tpParent, new object[] { objet.ContexteDonnee }); if (!parent.ReadIfExists((int)oldValeur)) { parent = null; } } nodeParent = CreateNodeObjet(node.Nodes, parent); nodeParent.StateImageIndex = c_nImageHistory; } } } #endregion #region relations filles foreach (CInfoRelation relationFille in structure.RelationsFilles) { if (relationFille.NomConvivial != "") { Type tpFille = CContexteDonnee.GetTypeForTable(relationFille.TableFille); if (typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(tpFille)) { int nImageNodeRelation = c_nImageUnchanged; TreeNode nodeRelation = new TreeNode(relationFille.NomConvivial); e.Node.Nodes.Add(nodeRelation); Hashtable tableOldIds = new Hashtable(); foreach (int nId in m_version.GetIdsChildsHistoriques(objet, relationFille)) { tableOldIds.Add(nId, true); } //Récupère la liste de tous les fils actuels C2iRequeteAvancee requete = new C2iRequeteAvancee(-1); requete.TableInterrogee = relationFille.TableFille; C2iChampDeRequete champDeRequete = new C2iChampDeRequete("ID", new CSourceDeChampDeRequete(objet.ContexteDonnee.GetTableSafe(relationFille.TableFille).PrimaryKey[0].ColumnName), typeof(int), OperationsAgregation.None, true); requete.ListeChamps.Add(champDeRequete); CFiltreData filtre = new CFiltreData(relationFille.ChampsFille[0] + "=@1 and " + CSc2iDataConst.c_champIdVersion + " is null", objet.Id); filtre.IgnorerVersionDeContexte = true; requete.FiltreAAppliquer = filtre; Hashtable tableNewIds = new Hashtable(); CResultAErreur result = requete.ExecuteRequete(objet.ContexteDonnee.IdSession); if (result) { foreach (DataRow row in ((DataTable)result.Data).Rows) { tableNewIds.Add(row[0], true); } } //Ajoute les ids actuels foreach (int nId in tableNewIds.Keys) { CObjetDonneeAIdNumerique fils = (CObjetDonneeAIdNumerique)Activator.CreateInstance(tpFille, new object[] { objet.ContexteDonnee }); if (fils.ReadIfExists(nId)) { int nImage = -1; if (!tableOldIds.ContainsKey(nId)) { nImage = c_nImagePlus; nImageNodeRelation = c_nImageEdit; } TreeNode nodeFille = CreateNodeObjet(nodeRelation.Nodes, fils); if (nImage >= 0) { nodeFille.StateImageIndex = nImage; } } } //Ajoute les vieux ids foreach (int nId in tableOldIds.Keys) { if (!tableNewIds.ContainsKey(nId)) { CObjetDonneeAIdNumerique fils = (CObjetDonneeAIdNumerique)Activator.CreateInstance(tpFille, new object[] { objet.ContexteDonnee }); if (fils.ReadIfExists(nId)) { int nImage = c_nImageMoins; nImageNodeRelation = c_nImageEdit; TreeNode nodeFille = CreateNodeObjet(nodeRelation.Nodes, fils); nodeFille.StateImageIndex = nImage; } } } nodeRelation.ImageIndex = nImageNodeRelation; nodeRelation.SelectedImageIndex = nImageNodeRelation; } } } #endregion } } }