/// ////////////////////////////////////////////////////// public static bool EditeTableau(CTableauCroise tableau, DataTable tableSource) { CFormEditTableauCroise form = new CFormEditTableauCroise(); CTableauCroise copie = (CTableauCroise)CCloner2iSerializable.Clone(tableau); form.Init(copie, tableSource); Boolean bOk = form.ShowDialog() == DialogResult.OK; if (bOk) { tableau.CopieFrom(copie); } form.Dispose(); return(bOk); }
//--------------------------------- public override CResultAErreur EndInsertData(System.Data.DataSet ds) { CResultAErreur result = base.EndInsertData(ds); if (NePasCalculer) { return(result); } if (!result) { return(result); } try { //Renomme la table de lien //Table qui a été créé et sur laquelle les tables filles ont un lien DataTable tableDeLien = ds.Tables[NomTable]; tableDeLien.TableName = NomTable + "_WK"; if (TablesFilles.Length == 0) { return(result); } //Trouve la table fille DataTable tableSource = ds.Tables[TablesFilles[0].NomTable]; if (tableSource == null) { result.EmpileErreur(I.T("Table @1 doesn't exist|20004", TablesFilles[0].NomTable)); return(result); } CTableauCroise tableau = new CTableauCroise(); tableau.CopieFrom(m_tableau); //Trouve le lien entre la table de lien et la table source DataColumn colDeLienSource = null; if (tableDeLien.Rows.Count != 0) //Sinon, c'est qu'on est //Surement table racine, ou que l'on n'a pas de données { foreach (Constraint contrainte in tableSource.Constraints) { ForeignKeyConstraint fk = contrainte as ForeignKeyConstraint; if (fk != null && fk.RelatedTable == tableDeLien) { colDeLienSource = fk.Columns[0]; break; } } } /*if (colDeLienSource == null) * { * result.EmpileErreur(I.T("Cannot find a link between @1 and @2|20007", * tableDeLien.TableName, tableSource.TableName)); * return result; * }*/ //Ajoute la colonne de lien comme clé if (colDeLienSource != null) { tableau.InsertChampCle(0, new CCleTableauCroise(colDeLienSource.ColumnName, colDeLienSource.DataType)); } result = tableau.CreateTableCroisee(tableSource); if (!result) { return(result); } if (result) { DataTable tableFinale = (DataTable)result.Data; tableFinale.TableName = NomTable; ds.Tables.Add(tableFinale); //Crée le champ de lien avec la table parente //Recherche de la table parente string strFK = ""; DataColumn colLienFinale = null; foreach (Constraint contrainte in tableDeLien.Constraints) { ForeignKeyConstraint fk = contrainte as ForeignKeyConstraint; if (fk != null) { if (fk.Table == tableDeLien) { strFK = fk.Columns[0].ColumnName; colLienFinale = C2iStructureExport.CreateForeignKeyInTable(fk.RelatedColumns[0], tableFinale, 0); break; } } } if (colLienFinale == null && ChampOrigine != null) { result.EmpileErreur(I.T("Cannot establish a link for Union table @1|20008", NomTable)); return(result); } //Met en cache les clés filles vers les clés parentes Dictionary <int, int> dicIdsFillesToParent = new Dictionary <int, int>(); string strPrimKey = tableDeLien.PrimaryKey[0].ColumnName; if (colLienFinale != null) { foreach (DataRow row in tableDeLien.Rows) { dicIdsFillesToParent[(int)row[strPrimKey]] = (int)row[strFK]; } if (colDeLienSource != null) { foreach (DataRow row in tableFinale.Rows) { row[colLienFinale.ColumnName] = dicIdsFillesToParent[(int)row[colDeLienSource.ColumnName]]; } } } } if (SupprimerTablesTravail) { SupprimeTableEtDependances(ds, tableDeLien.TableName); } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } return(result); }