Bonjour,
voila depuis ce matin que je penche sur ce problème, et que je commence à m'arracher les cheveux...
Le principe est assez simple, j'ai un gridview classique, avec plusieurs colonnes dedans, que je peux éditer et tout, ca marche bien.
Le problème est que je rajoute des colonnes dynamiquements, que je veux aussi pouvoir modifier.
C'est à partir de là ou cela se complique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 foreach (DataRow r in d.Rows) { string s = (string)r.ItemArray[0]; BoundField maColonne; maColonne = new BoundField(); maColonne.HeaderText = s; maColonne.DataField = s; GridView1.Columns.Add(maColonne); //mise à jour du select et de l'update }
1er problème : ou ajouter les colonnes ?
Si je les mets dans le PageLoad, elles sont ajoutés a chaque fois, et même entre les changements de page, et donc je peux me retrouver avec 1, 2, 3.. fois les colonnes ajoutées dans mon
gridview.
Si je désactive le viewstate et que je les ajoute à chaque fois, elles n'apparaissent plus en double, mais il me dit qu'il ne trouve pas les colonnes ajoutées dynamiquement lorsque je clique sur "Edit".
Ensuite, je met à jour le select du gridview, pour faire des jointures sur les champs sélectionnés. Le résultat est correct.
Maintenant, ca se corse quand je veux pouvoir modifier ces nouvelles colonnes.
2ème problème : Je suis obligé de modifier le updatecommand de mon gridview et de rajouter des faux paramètres, sinon il me dit qu'il y a un problème dans les paramètres(les boundfield des colonnes ajoutées ne sont pas liés dans l'updatecommand).
Pour mettre à jour ces champs, je déclenche une procédure : GridView1_OnRowUpdated dans laquelle je met à jour ces champs indépendamment.
Dernier problème : j'ai voulu créer des template à la place des Boundfield pour mes colonnes supplémentaires, ils fonctionnent apparement correctement, sauf qu'on moment de récupérer les valeurs contenues dans ces champs pour mettre à jour la base de données, je n'arrive pas à accéder aux textbox... Je fais :
Voila, si vous voyez une solution pour au moins un de ces problèmes, n'hésitez pas, je vous en serais très reconnaissant. Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // s = "ID du textbox du templatefield en mode édition" string valeur = ((TextBox)GridView1.Rows[GridView1.EditIndex].FindControl(s)).Text;
Partager