Salut, je crois avoir bien expliquer mon problème dans l'intitulé, j'ai bon cherché mais je ne trouve comment ajouter un contrôle dynamiquement à mon GridView, et puis j'aurai besoin aussi de récupérer ce que l'utilisateur a saisi,
Merci.
Salut, je crois avoir bien expliquer mon problème dans l'intitulé, j'ai bon cherché mais je ne trouve comment ajouter un contrôle dynamiquement à mon GridView, et puis j'aurai besoin aussi de récupérer ce que l'utilisateur a saisi,
Merci.
bonjour,
qu'as tu essayé ? quel est le problème ?
dans la fonction Page_LoadComplete :
J'ai rempli la grille avec une ligne vide, juste pour pouvoir mettre un textbox dans la première cellule :
après cela j'ai instancier un TextBox et je l'ai mis dans la grille et ça marche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 myTable = new DataTable("myTable"); // La Table de données DataColumn col; // Variable Temporaire DataRow Row; // Pour Remplire les lignes col = new DataColumn("Tâches"); cols.Add(col); col = new DataColumn("Quota"); cols.Add(col); col = new DataColumn("Imputé"); cols.Add(col); col = new DataColumn("Imp HS "); cols.Add(col); col = new DataColumn("Commentaires"); cols.Add(col); foreach (DataColumn column in cols) myTable.Columns.Add(column); Row = myTable.NewRow(); for (int i = 0; i < cols.Count ; i++) { Row[i] = ""; } myTable.Rows.Add(Row); myView = new DataView(myTable); GV.DataSource = myView; GV.DataBind();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 TextBox tb = new TextBox(); tb.ID = "essai"; GrilleImputations.Rows[0].Cells[0].Controls.Add(tb);
Lors le clique sur un bouton :
lorsque j'exécute ceci je reçois l'erreure suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 TextBox text; text = (TextBox)GrilleImputations.FindControl("essai"); Response.Write(text.Text);
et quand j'affiche :La référence d'objet n'est pas définie à une instance d'un objet.
le chiffre est 0 !
Code : Sélectionner tout - Visualiser dans une fenêtre à part Response.Write(GrilleImputations.Rows[0].Cells[0].Controls.Count);
Merci de bien vouloir m'aider.
peux tu poster le code complet de l'évènement quand tu click sur le bouton
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 protected void Button3_Click(object sender, EventArgs e) { Response.Write(GrilleImputations.Rows[0].Cells[0].Controls.Count); TextBox text = (TextBox )GrilleImputations.Rows[0].FindControl("try"); Response.Write("try"); }
ton textbox il s'appelle "try" ou "essai" ton databind du gridview est bien confitionné par un Page.isPostBack ?
voilà le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 if (!Page.IsPostBack) { Grille2 grille2 = new Grille2(); grille2.ChargerGrille(GrilleImputations); TextBox tb = new TextBox(); tb.ID = "try"; GrilleImputations.Rows[0].Cells[0].Controls.Add(tb); } public void ChargerGrille(GridView GV) { #region déclarations myTable = new DataTable("myTable"); // La Table de données DataColumn col; // Variable Temporaire DataRow Row; // Pour Remplire les lignes #endregion #region Gestion des colonnes // Créer des Colonnes col = new DataColumn("Tâches"); cols.Add(col); col = new DataColumn("Quota"); cols.Add(col); col = new DataColumn("Imputé"); cols.Add(col); col = new DataColumn("Imp HS "); cols.Add(col); col = new DataColumn("Commentaires"); cols.Add(col); // Ajouter des Colonnes à la Table foreach (DataColumn column in cols) myTable.Columns.Add(column); #endregion #region Remplire les Lignes Row = myTable.NewRow(); for (int i = 0; i < cols.Count ; i++) { Row[i] = ""; } myTable.Rows.Add(Row); #endregion #region Mettre à jour la Table myView = new DataView(myTable); GV.DataSource = myView; GV.DataBind(); #endregion } protected void Button3_Click(object sender, EventArgs e) { for (int i = 0; i < GrilleImputations.Rows.Count; i++) { GridViewRow row = GrilleImputations.Rows[i]; string detail = ((TextBox)row.FindControl("try")).Text; Response.Write(detail); } }
et Merci Infiniment.
ca peut etre du fait que tu cherches le textbox sur chaque ligne de ton gridview et il me semble qu'il commence par la ligne de header (où il ne trouve pas ton controle) puis le body puis le footer.
D'ailleurs verifies combien de ligne te renvoie GrilleImputations.Rows.Count
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 protected void Button3_Click(object sender, EventArgs e) { for (int i = 0; i < GrilleImputations.Rows.Count; i++) { GridViewRow row = GrilleImputations.Rows[i]; If(row.RowType = DataControlRowType.DataRow ) { string detail = ((TextBox)row.FindControl("try")).Text; Response.Write(detail); } } }
c'est toujours la même erreur sur l'instruction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part string detail = ((TextBox)row.FindControl("try")).Text;La référence d'objet n'est pas définie à une instance d'un objet.
si tu mets en commentaire la ligne qui pose problème et que tu click sur ton bouton, est ce que tu vois toujours ton textbox ?
il ne donne plus d'erreur.
Si Vous voulez je peux vous envoyer ce que j'ai réalisé pour que vous puissiez voir mieux,
Merci Infiniment.
oui,
C'est bon j'ai trouvé une autre solutions, j'ai ajouter des colonnes de type textbox à travers l'editeur, et le reste à l'aide d'un DataTable avec du code.
le seul soucis qui me reste c'est que les colonnes ajoutées par l'éditeur prennent la gauche, c'est normal ce sont les premières crées, y a t-il un moyen pour les faire bousculer à droite ?
à part ça tout fonctionne à merveille, et Merci infiniment pour votre aide.
Partager