Salut
j'ai un User control comme suit :
dans une boucle pour chaque objet que je rencontre et qui correspond à ce que je veux (ici un utilisateur)
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
je crée un User control WebControlCollab. comme suit :
Je bind donc mon grid view avec les données issue du dataset.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19foreach (Utilisateur ut in _utilisateurEnCours.ListeCollaborateur) { SqlCommand chercherInfoDemande = new SqlCommand(ConfigurationSettings.AppSettings["proc_RechercherDemandeCongeUtilisateur"], connection); SqlDataAdapter dataAdapter = new SqlDataAdapter(chercherInfoDemande); chercherInfoDemande.CommandType = CommandType.StoredProcedure; chercherInfoDemande.Parameters.Add(new SqlParameter("@personne_id", ut.IdUtilisateur)); DataSet ds = new DataSet(); dataAdapter.Fill(ds); //on va faire le ControlUser WebControlCollaborateur WebControlCollaborateur WebControlCollaborateur; String virtualPath = "~/Controles/WebControlCollaborateur.ascx"; WebControlCollaborateur = (WebControlCollaborateur)Fonctions.LoadControl(this, virtualPath, ds, "WebControlCollaborateur" + i.ToString(), ut.NomUtilisateur, ut.PrenomUtilisateur, i.ToString(), i.ToString(), i.ToString(), i.ToString(),"demande_id"); WebControlCollaborateur.Visible = true; this.PanelDonnees.Controls.Add(WebControlCollaborateur); //this.Controls.Add(WebControlCollaborateur); i++; }
j'instancie mon User Control en utilisant cette fonction (Merci nico)
et enfin le constructeur de mon User Control
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public static WebControlCollaborateur LoadControl(Page page, string pathControleUtilisateur, params object[] parametresConstructeur) { List<Type> constParamTypes = new List<Type>(); foreach (object constParam in parametresConstructeur) constParamTypes.Add(constParam.GetType()); WebControlCollaborateur WebControlCollaborateur = (WebControlCollaborateur)page.LoadControl(pathControleUtilisateur); // trouve le constructeur ConstructorInfo constructeur = WebControlCollaborateur.GetType().BaseType.GetConstructor(constParamTypes.ToArray()); // et l'invoke if (constructeur == null) throw new MemberAccessException("Contrôle utilisateur non trouvé : " + WebControlCollaborateur.GetType().BaseType); else constructeur.Invoke(WebControlCollaborateur, parametresConstructeur); return WebControlCollaborateur; }
Et la comme j'utilise plusieurs fois le même string pour le dataKeyNames du GridView il me pète une erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20public WebControlCollaborateur(DataSet ds, string strID, string labelNom, String labelPrenom, string id_div, string id_button, string id_panel,string id_gridView,string dataSourceKey) { this.ID = strID; this.Controls.Add(GridViewInfoCollabo); this.LabelCollaborateur.Text = labelNom; this.LabelCollaborateur.Text += " "; this.LabelCollaborateur.Text += labelPrenom; ((HtmlGenericControl)this.FindControl("Division")).ID += id_div; this.FindControl("ButtonMontrer").ID += id_button; this.FindControl("PanelInfoCollaborateur").ID += id_panel; this.FindControl("PanelInfoCollaborateur").Visible = false; this.FindControl("GridViewInfoCollabo").ID += id_gridView; _DataSource = ds; GridViewInfoCollabo.DataSource = _DataSource; GridViewInfoCollabo.DataKeyNames = new string[1] { dataSourceKey }; GridViewInfoCollabo.AutoGenerateColumns = false; ContruireGridView(); GridViewInfoCollabo.DataBind(); }:
erreur :
Item has already been added. Key in dictionary: 'demande_id' Key being added: 'demande_id'
J'ai besoin d'aide svp.
Alors que même au debbuger il me reconnais qu'une seule dataKeyNames...

 

 
		
		 
         
  
			
			

 
   


 Grid view user control et reflexion
 Grid view user control et reflexion
				 Répondre avec citation
  Répondre avec citation
Partager