/// ////////////////////////////////////////// private void m_btnAddCle_Click(object sender, System.EventArgs e) { if (m_wndListeChampsOrigine.SelectedItems.Count == 1) { ListViewItem item = m_wndListeChampsOrigine.SelectedItems[0]; DataColumn col = item.Tag as DataColumn; if (col != null) { m_tableauCroise.AddChampCle(new CCleTableauCroise(col.ColumnName, col.DataType)); InitChamps(m_tableSource, m_tableauCroise); } } }
/// ///////////////////////////////////////////////////////// public CResultAErreur EndInsertData(DataSet ds) { CResultAErreur result = CResultAErreur.True; if (m_bNePasCalculer) { return(result); } if (m_mapIdBaseParentToReadToIdTable == null || m_mapIdBaseParentToReadToIdTable.Count == 0) { return(result); } DataTable table = ds.Tables[NomTable]; if (table == null) { result.EmpileErreur(I.T("Table @1 doesn't exist|116", NomTable)); return(result); } DataColumn colFille = null; if (m_tableParente != null) { foreach (Constraint constraint in table.Constraints) { if (constraint is ForeignKeyConstraint) { ForeignKeyConstraint fkConst = (ForeignKeyConstraint)constraint; colFille = fkConst.Columns[0]; } } } string strListe = ""; foreach (int nId in m_mapIdBaseParentToReadToIdTable.Keys) { strListe += nId.ToString() + ";"; } strListe = strListe.Substring(0, strListe.Length - 1); CFiltreData filtreDeBase = new CFiltreDataAvance( m_requete.TableInterrogee, m_strChampIdParent + " in {" + strListe + "}"); result = GetFiltreDataAAppliquer(m_elementAVariablePourFiltres); if (!result) { result.EmpileErreur(I.T("Error in cumulated table @1 filter|126", NomTable)); return(result); } CFiltreData leFiltreComplet = CFiltreData.GetAndFiltre( filtreDeBase, (CFiltreData)result.Data); C2iRequeteAvancee requete = (C2iRequeteAvancee)CCloner2iSerializable.Clone(m_requete); string strChampParent = m_strChampIdParent + "_CLE_DB"; C2iChampDeRequete champ = new C2iChampDeRequete( strChampParent, new CSourceDeChampDeRequete(m_strChampIdParent), typeof(int), OperationsAgregation.None, true); requete.ListeChamps.Add(champ); requete.FiltreAAppliquer = leFiltreComplet; result = requete.ExecuteRequete(m_nIdSession); if (!result) { return(result); } if (result.Data == null) { return(null); } DataTable tableDonnees = (DataTable)result.Data; if (m_tableauCroise != null) { CTableauCroise newTableau = (CTableauCroise)CCloner2iSerializable.Clone(m_tableauCroise); newTableau.AddChampCle(new CCleTableauCroise(strChampParent, typeof(int))); result = newTableau.CreateTableCroisee(tableDonnees); if (!result) { result.EmpileErreur(I.T("Error in data crossing|130")); return(result); } tableDonnees = (DataTable)result.Data; foreach (DataColumn col in tableDonnees.Columns) { DataColumn laColonne = table.Columns[col.ColumnName]; if (laColonne == null) { table.Columns.Add(col.ColumnName, col.DataType); } //Stef le 5/5/2005 : Si la colonne n'est pas du bon type, //son type est ajusté ! else if (laColonne.DataType != col.DataType) { laColonne.DataType = col.DataType; } } } else { //Ajuste le type des colonnes foreach (DataColumn col in tableDonnees.Columns) { DataColumn laColonne = table.Columns[col.ColumnName]; if (laColonne != null && laColonne.DataType != col.DataType) { laColonne.DataType = col.DataType; } } } //Intègre les données dans la table ArrayList lstNewRows = new ArrayList(); foreach (DataRow row in tableDonnees.Rows) { DataRow newRow = table.NewRow(); foreach (DataColumn col in row.Table.Columns) { if (newRow.Table.Columns[col.ColumnName] != null) { newRow[col.ColumnName] = row[col]; } } if (colFille != null) { newRow[colFille] = (int)m_mapIdBaseParentToReadToIdTable[row[strChampParent]]; } table.Rows.Add(newRow); } return(result); }
/// ///////////////////////////////////////////////////////// public CResultAErreur InsertDataInDataSet( IEnumerable list, DataSet ds, ITableExport tableParente, int[] nValeursCle, RelationAttribute relationToObjetParent, IElementAVariablesDynamiquesAvecContexteDonnee elementAVariablePourFiltres, CCacheValeursProprietes cacheValeurs, ITableExport tableFilleANeParCharger, bool bAvecOptimisation, CConteneurIndicateurProgression indicateur) { CResultAErreur result = CResultAErreur.True; if (NePasCalculer) { return(result); } int nValeurIndicateur = 0; indicateur.SetBornesSegment(0, m_tableauCroise == null?2:3); if (list == null) { return(result); } if (!(list is CListeObjetsDonnees)) { result.EmpileErreur(I.T("Attempt of cumulated table on something other that a data list|125")); return(result); } CListeObjetsDonnees listeDonnees = (CListeObjetsDonnees)list; if (relationToObjetParent == null) { //Principe de la lecture en une fois : //Si la liste des une liste objets contenus, c'est que chaque élément //est un composant d'un parent. On stock donc tous les parents //Pour lesquels on veut les données, //et elles seront lues dans le EndInsertTable. //Par contre si la liste contenu a un filtre, on ne peut plus //stocker juste ça, il faudrait en plus stocker le filtre et ça //devient compliqué. if (listeDonnees is CListeObjetsDonneesContenus && (listeDonnees.Filtre == null || !listeDonnees.Filtre.HasFiltre)) { CListeObjetsDonneesContenus listeContenu = (CListeObjetsDonneesContenus)listeDonnees; if (listeContenu.ObjetConteneur != null && typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(listeContenu.ObjetConteneur.GetType())) { if (m_mapIdBaseParentToReadToIdTable == null) { m_mapIdBaseParentToReadToIdTable = new Hashtable(); } m_mapIdBaseParentToReadToIdTable[((CObjetDonneeAIdNumerique)listeContenu.ObjetConteneur).Id] = nValeursCle[0]; m_strChampIdParent = listeContenu.ChampsFille[0]; m_tableParente = tableParente; listeContenu.GetFiltreForRead(); m_nIdSession = listeContenu.ContexteDonnee.IdSession; m_elementAVariablePourFiltres = elementAVariablePourFiltres; return(result); } } } DataTable table = ds.Tables[NomTable]; if (table == null) { result.EmpileErreur(I.T("Table @1 doesn't exist|116", NomTable)); return(result); } DataColumn colFille = null; if (tableParente != null) { foreach (Constraint constraint in table.Constraints) { if (constraint is ForeignKeyConstraint) { ForeignKeyConstraint fkConst = (ForeignKeyConstraint)constraint; colFille = fkConst.Columns[0]; } } } CFiltreData filtreDeBase = listeDonnees.GetFiltreForRead(); result = GetFiltreDataAAppliquer(elementAVariablePourFiltres); if (!result) { result.EmpileErreur(I.T("Error in cumulated table @1 filter|126", NomTable)); return(result); } CFiltreData leFiltreComplet = CFiltreData.GetAndFiltre( filtreDeBase, (CFiltreData)result.Data); C2iRequeteAvancee requete = m_requete; CTableauCroise tableauCroise = m_tableauCroise; string strChampParent = ""; if (relationToObjetParent != null) { requete = (C2iRequeteAvancee)CCloner2iSerializable.Clone(m_requete); strChampParent = relationToObjetParent.ChampsParent[0] + "_CLE_DB"; Type typeChampParent = typeof(string); IChampDeTable champParent = tableParente.Champs.FirstOrDefault(c => c.NomChamp == strChampParent); if (champParent != null) { typeChampParent = champParent.TypeDonnee; } C2iChampDeRequete champ = new C2iChampDeRequete( strChampParent, new CSourceDeChampDeRequete(relationToObjetParent.ChampsFils[0]), typeof(int), OperationsAgregation.None, true); requete.ListeChamps.Add(champ); string strListe = ""; foreach (int nId in nValeursCle) { strListe += nId.ToString() + ";"; } strListe = strListe.Substring(0, strListe.Length - 1); leFiltreComplet = CFiltreData.GetAndFiltre(leFiltreComplet, new CFiltreDataAvance( requete.TableInterrogee, relationToObjetParent.ChampsFils[0] + " in {" + strListe + "}")); if (tableauCroise != null) { tableauCroise = (CTableauCroise)CCloner2iSerializable.Clone(m_tableauCroise); tableauCroise.AddChampCle(new CCleTableauCroise(strChampParent, typeChampParent)); } } requete.FiltreAAppliquer = leFiltreComplet; indicateur.SetInfo(I.T("Table @1 (request)|127", NomTable)); if (ChampOrigine == null) { requete.TableInterrogee = CContexteDonnee.GetNomTableForType(listeDonnees.TypeObjets); } result = requete.ExecuteRequete(listeDonnees.ContexteDonnee.IdSession); indicateur.SetValue(nValeurIndicateur++); if (indicateur.CancelRequest) { result.EmpileErreur(I.T("Execution cancelled by the user|118")); return(result); } if (!result) { return(result); } if (result.Data == null) { return(null); } DataTable tableDonnees = (DataTable)result.Data; if (tableauCroise != null) { indicateur.SetInfo(I.T("Table @1 (cross table)|128", NomTable)); result = tableauCroise.CreateTableCroisee(tableDonnees); indicateur.SetValue(nValeurIndicateur++); if (!result) { result.EmpileErreur(I.T("Error in data crossing|130")); return(result); } if (indicateur.CancelRequest) { result.EmpileErreur(I.T("Execution cancelled by the user|118")); return(result); } tableDonnees = (DataTable)result.Data; foreach (DataColumn col in tableDonnees.Columns) { DataColumn laColonne = table.Columns[col.ColumnName]; if (laColonne == null) { table.Columns.Add(col.ColumnName, col.DataType); } //Stef le 5/5/2005 : Si la colonne n'est pas du bon type, //son type est ajusté ! else if (laColonne.DataType != col.DataType) { laColonne.DataType = col.DataType; } } } else { //Ajuste le type des colonnes foreach (DataColumn col in tableDonnees.Columns) { DataColumn laColonne = table.Columns[col.ColumnName]; if (laColonne != null && laColonne.DataType != col.DataType) { laColonne.DataType = col.DataType; } } } indicateur.SetInfo(I.T("Storage|129")); indicateur.PushSegment(nValeurIndicateur, nValeurIndicateur + 1); indicateur.SetBornesSegment(0, tableDonnees.Rows.Count); int nFrequence = Math.Min(tableDonnees.Rows.Count / 20, 500) + 1; //Intègre les données dans la table ArrayList lstNewRows = new ArrayList(); int nCompteur = 0; foreach (DataRow row in tableDonnees.Rows) { nCompteur++; if (nCompteur % nFrequence == 0) { indicateur.SetValue(nCompteur); if (indicateur.CancelRequest) { result.EmpileErreur(I.T("Execution cancelled by the user|118")); return(result); } } DataRow newRow = table.NewRow(); foreach (DataColumn col in row.Table.Columns) { if (newRow.Table.Columns[col.ColumnName] != null) { newRow[col.ColumnName] = row[col]; } } if (colFille != null) { if (relationToObjetParent == null) { newRow[colFille] = nValeursCle[0]; } else { newRow[colFille] = row[strChampParent]; } } table.Rows.Add(newRow); } indicateur.PopSegment(); return(result); }