Bonsoir à tous,
Après avoir galéré de nombreuses heures sur le sujet, je vous transmet mon analyse en espérant que quelqu'un puisse avoir la solution.
J'ai réalisé une application de gestion, qui a de nombreux écrans de gestion de données et j'ai donc centralisé dans une classe "outils", toutes les fonctions de base qui permettent de limiter dans chaque "form", le code redondant.
Ainsi, toute la gestion des "edit","commit" et rollback est centralisée dans la classe des "outils". La clef étant le DataGridView, qui connait le "BindingSource", lui même connait le "DataSet" et le "DataTable" concerné. Il manquait évidemment le "TableAdapter", qu'il est difficile de relier aux autres composants. Pour l'instant, j'ai passé le "TableAdapter" en paramétre et est récupéré en tant qu'objet dans la procédure "outil" concernée.
Tourtefois, et contrairement à VB, un objet ne peut pas appeler les méthodes (Update et Fill) du "TableAdapter". Il m'a été nécessaire de passer par "Reflection" et après de nombreuses tentatives, j'ai trouvé un moyen de récupérer la méthode et de l'utiliser avec "Invoke", mais c'est bancale.
En effet, il y a une méthode "GetType().GetMethod", qui malgré toutes mes tentatives (string avec "Update", string avec "Update (namespace.Dataset") ne me redonne que null. Je précise que la méthode à retrouver est publique et que j'ai utilisé tous les paramètres qui me semblaient utiles : "MethodInfo My_MethodeInfo = My_Adapter.GetType().GetMethod("Update", BindingFlags.Public | BindingFlags.Instance, null, CallingConventions.Any, new Type[] { typeof(DataSet) }, null); "
Pourtant la méthode existe, car en utilisant "GetType().GetMethods()", je trouve la méthode avec la collection (voir ci-dessous) :
[0]: {Boolean get_ClearBeforeFill()}
[1]: {Void set_ClearBeforeFill(Boolean)}
[2]: {Int32 Fill(BiensDataTable)}
[3]: {BiensDataTable GetData()}
[4]: {Int32 Update(BiensDataTable)}
[5]: {Int32 Update(MY_HOME.MH_DataSet)}
[6]: {Int32 Update(System.Data.DataRow)}
La méthode qui m'intéresse est la méthode indice [5] et en la passant à un objet "MethodInfo", je peux réaliser mon opération d'update.
Dans mon programme je l'utilise de la manière suivante : My_Method = My_TA.GetType().GetMethods()[5].
La procédure fonctionne, mais je trouverai propre de retrouver la méthode indice [5] par une recherche via le nom ("Update").
Comme vous pouvez le constater j'ai creusé le sujet, mais je n'arrive pas à finaliser.
Si vous avez la solution, qui doit certainement être devant mon nez, je vous en serait reconnaissant.
Cordialement
Pierre
Partager