Optimisation de TableAdapter.Fill() dans une boucle
Bonjour
Actuellement, je remplit les DataTables de mon DataSet via la méthode .Fill() des Table Adapters associés à la connection vers une BDD Access.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| Me.FoodTableAdapter.Fill(Me.DataSet.Food)
Me.WeaponTableAdapter.Fill(Me.DataSet.Weapon)
Me.AmmoTableAdapter.Fill(Me.DataSet.Ammo)
Me.RangedTableAdapter.Fill(Me.DataSet.Ranged)
Me.HeadTableAdapter.Fill(Me.DataSet.Head)
Me.HP_ScalingTableAdapter.Fill(Me.DataSet.HP_Scaling)
Me.NeckTableAdapter.Fill(Me.DataSet.Neck)
Me.HandsTableAdapter.Fill(Me.DataSet.Hands)
Me.BodyTableAdapter.Fill(Me.DataSet.Body)
Me.RingTableAdapter.Fill(Me.DataSet.Ring)
Me.EarTableAdapter.Fill(Me.DataSet.Ear)
Me.WaistTableAdapter.Fill(Me.DataSet.Waist)
Me.BackTableAdapter.Fill(Me.DataSet.Back)
Me.LegsTableAdapter.Fill(Me.DataSet.Legs)
Me.FeetTableAdapter.Fill(Me.DataSet.Feet)
Me.Damage_TypesTableAdapter.Fill(Me.DataSet.Damage_Types)
Me.Skills_ListTableAdapter.Fill(Me.DataSet.Skills_List)
Me.Jobs_ListTableAdapter.Fill(Me.DataSet.Jobs_List)
Me.BLU_SpellsTableAdapter.Fill(Me.DataSet.BLU_Spells)
Me.BLU_Job_TraitsTableAdapter.Fill(Me.DataSet.BLU_Job_Traits)
Me.AreasTableAdapter.Fill(Me.DataSet.Areas)
Me.EnemiesTableAdapter.Fill(Me.DataSet.Enemies)
Me.BuffsTableAdapter.Fill(Me.DataSet.Buffs)
Me.EnfeebsTableAdapter.Fill(Me.DataSet.Enfeebs)
Me.Job_AbilitiesTableAdapter.Fill(Me.DataSet.Job_Abilities)
Me.Job_StatSkill_GradesTableAdapter.Fill(Me.DataSet.Job_StatSkill_Grades)
Me.Job_TraitsTableAdapter.Fill(Me.DataSet.Job_Traits)
Me.Mob_DataTableAdapter.Fill(Me.DataSet.Mob_Data)
Me.Race_Stat_GradesTableAdapter.Fill(Me.DataSet.Race_Stat_Grades)
Me.Skill_CapsTableAdapter.Fill(Me.DataSet.Skill_Caps)
Me.Stat_ScalingTableAdapter.Fill(Me.DataSet.Stat_Scaling)
Me.Stats_ListTableAdapter.Fill(Me.DataSet.Stats_List)
Me.WS_AvailabilityTableAdapter.Fill(Me.DataSet.WS_Availability)
Me.WS_TableTableAdapter.Fill(Me.DataSet.WS_Table) |
Comme on le voit ce code est bien répétitif... J'essaie donc de réduire toutes ces lignes en une seule boucle dans le genre :
Code:
1 2 3 4 5 6 7
| For Each dt As DataTable In Me.DataSet.Tables
For Each ta In DataSetTableAdapters ' cet espace de noms contient exactement tous les noms de mes TableAdapters, mais ne peut pas être utilisé après "In"...
If Replace(ta.ToString, "TableAdapter", "") = dt.ToString Then
ta.Fill(dt)
End If
Next
Next |
...mais je n'y arrive pas.
ou encore dans le sens inverse du code suivant:
Code:
1 2 3 4
| If Me.DataSet.HasChanges Then
'Appliquer les changements dans la base de données
Me.TableAdapterManager.UpdateAll(Me.DataSet)
End If |
Malheureusement la méthode .FillAll() n'existe pas...
Quelqu'un saurait-il la bonne syntaxe à employer ? Merci.
remplir les datatables avec fill
bonjour,masmunai
pourquoi remplir les datables ,puisque à l'insertion il ya une creation d'une instance de datatable et d'un tableadapter et invocation d'une methode fill.
alors il y a 2 cas de figure:
1/ tu veux afficher tes tables
-tu rajoute un controle lie au donnes et le designer te demande la source de donne et il cree un bindingsource automatique.
-a l'execution il te remplit automatiquement le controle lie(il execute le fill behind the scene,derriere les coulisses pour parler en francais).
- la synchronisation des donnees entre les controles est egalement acquise(behind the scene,TableAdapterManager est à l'oeuvre).
2/ tu veux associer une table à autre chose qu'un controle visuel mettons:
- une liste de champ (NomClient,NomProduit,NumeroCommande),tu n'as pas besoin d'un tableadapter,tu auras plus tot besoin d'une liste à remplir en parcourant la datatable et en ajoutant le champ cible .
Dans un controle lie au donne il suffit de faire:
Code:
datagridview1.datasource=listeNomClient
-une classe mappe sur un ou plusieurs champs d'une datatable ,c'est pareil tu fais une boucle sur la datatable et tu instancie ta classe ,tu remplis chaque champ de la classe et tu associe une liste qui gere la classe.
exemple:
Code:
1 2
| public class PProduit 'classe mappe sur datatable Produit
public listePProduit as list(of PProduit) ' liste qui gere la classe |
Dans un controle lie au donne il suffit de faire:
Code:
datagridview1.datasource= listePProduit
Il affichera dans la datagridview les champs mappes.
Donc les Fill sont gratuits,c'est le traitement et la synchronisation entre les datagridview qu'il faut faire par code avec(il n' y a plus de TableAdapterManager helas).
tout avantage se paye (l'inconvenient de l'avantage) ,c'est la loi de notre maratre nature.
etre ou ne pas etre telle est la question...
bon code....