2009-06-21 10 views
1

J'essaye d'écrire une méthode plus générique qui remplira soit une liste déroulante ASP.NET OU un telerik RadComboBox avec des états. Je voudrais passer le contrôle en paramètre de la méthode. J'ai un DataTable qui contient tous les états, que je boucle (voir ci-dessous) - Je voudrais rendre cela applicable à un Telerik RadComboBox - donc j'ai besoin de changer le premier paramètre, et aussi la partie où je Insère un nouveau ListItem - pour Telerik RadComboBox c'est un nouveau RadComboBoxItem. Comment puis-je faire ceci?Retour contrôle ASP DDL ou Telerik

public void PopulateStates(DropDownList ddlStates, string country) 
{ 
    ddlStates.Items.Clear(); 
    DataLookup dl = new DataLookup(); 
    DataTable dt = dl.GetStatesByCountry(country); 
    if (dt != null) 
    { 
     if (dt.Rows.Count > 0) 
     { 
      ddlStates.Items.Insert(0, new ListItem("")); 
      for (int i = 0; i < dt.Rows.Count; i++) 
      { 
       ddlStates.Items.Add(new ListItem(dt.Rows[i]["STCD_Descr"].ToString(), 
        dt.Rows[i]["STCD_State_CD"].ToString())); 
      } 
     } 
    } 
} 

Répondre

0

Je regardai la documentation de telerik & il ne semble pas être façon courante de faire - ce que vous essayez de faire.

Si cela est possible, essayez d'utiliser la liaison de données (en définissant DataSource & en appelant DataBind).
Note: Je ne l'ai pas essayé. Mais je pense que cela devrait être soutenu par les deux.

0

Puisque ListBox et RadComboBox n'ont pas de classes communes à l'exception de la classe "Control", vous devrez vérifier le type réel.

Que diriez-vous du code suivant?

public void PopulateStates(Control ddl, string country) 
{ 
    object listItem = new object(); 
    switch (ddl.GetType().Name) 
    { 
     case "RadComboBox": 
      listItem = listItem as RadComboBoxItem; 
      ddl = ddl as RadComboBox; 
      break; 
     case "ListBox": 
      listItem = listItem as ListItem; 
      ddl = ddl as ListBox; 
      break; 
     default: 
      return; 
    } 

    // proceed with your code 
} 
+0

Cela semble fonctionner, cependant, lorsque j'essaie de faire quelque chose comme ddlStates.Items.Clear(); (dans la zone "passez à votre code" - il ne reconnaît pas que "Items" est une propriété car il ne sait pas quel type de contrôle il est à ce moment-là - j'obtiens une erreur de compilation –

+0

désolé ddl. Items.Clear(); –

+0

Désolé, vous avez entièrement raison! Je dormais pendant que j'écris ceci, ça ne fonctionnera pas parce que la classe de base qu'ils partagent n'a pas de propriété appelée Items.La solution la plus simple que je peux voir dans le moment est de créer 2 méthodes prédéfinies, la première à accepter radCombo et l'autre dropDown. –

Questions connexes