2009-09-21 5 views
0

J'ai un problème en C#, Aidez-moi s'il vous plaît à:variable C#, .NET

J'ai une liste déroulante et quelques étiquettes et

chaque valeur ListItem de LDD est égale à chaque ID d'étiquette

par exemple

   <asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true" > 
        <asp:ListItem Text="Route A - Toronto to Barrie" Value="RouteA"> 
       </asp:DropDownList> 

       <asp:Label ID="RouteA" runat="server" Text="42"></asp:Label> 

QUESTION:

private Label ccc; 

public void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    this.ccc.Text = DropDownList1.SelectedValue.ToString(); 
} 

Mon code n'est pas ce que je veux.

Je veux obtenir la valeur de l'élément de selectet (DropDownList1.SelectedValue.ToString()) de DDL et mis dans une variable (this.ccc) et après que je veux appeler l'étiquette avec le même ID.

logique Je veux quelque chose comme ceci:

this.ccc = DropDownList1.SelectedValue.ToString(); (dans Mon cas, this.ccc = "RouteA")

this.ccc.Text = "test" (dans Mon cas) (this.ccc.Text = "42");

Merci beaucoup, si vous avez compris, s'il vous plaît aidez-moi !!

+1

Je suis désolé mais je ne peux vraiment pas comprendre cela ... –

+0

Je veux être sélectionné.la valeur de listItem, le mettre dans une même variable, et après cet appel LABEL qui a le même ID par exemple logique Javascript var test = selectet.item.val; Label.TEXT = test.Texte; – AlexC

+0

Je pense que vous devriez nommer votre liste déroulante quelque chose d'un peu plus descriptif que DropDownList1. Si elle contient des routes, pourquoi ne pas l'appeler quelque chose comme routeDropDownList? – Joren

Répondre

2

Je ne suis pas sûr que je comprends bien, mais:

// this returns the ID of the label 
string labelId = DropDownList1.SelectedValue; 

// now find the label with that ID 
Label label = FindControl(labelId) as Label; 

this.ccc.Text = label.Text; 
+0

Libellé d'étiquette = FindControl (labelId) en tant qu'étiquette; après la compilation, Label labelID (null) – AlexC

+0

Je suis désolé, mais je ne comprends pas ce que vous essayez de me dire avec votre commentaire. – M4N

2

Que diriez-vous ceci:

Label myLabel = (Label)Page.FindControl(DropDownList1.SelectedValue.ToString()); 
myLabel.Text = "test"; 
1

Je pense que vous êtes à la recherche Page.FindControl.

Label label = (Label)Page.FindControl(DropDownList1.SelectedValue); 
this.ccc.Text = label.Text; 

Je ne crois pas que vous devez appeler ToString() sur la propriété SelectedValue parce qu'elle est une chaîne par définition.

Il y a une chance que vos commandes sont au plus profond de la hiérarchie de la page, vous pouvez utiliser la méthode de FindControl récursif (volé de son un de ses blog articles) de Jeff Atwood:

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id) 
    { 
    return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
    Control t = FindControlRecursive(c, id); 
    if (t != null) 
    { 
     return t; 
    } 
    } 

    return null; 
} 

Votre code va changer à:

Label label = (Label)FindControlRecursive(Page, DropDownList1.SelectedValue); 
this.ccc.Text = label.Text; 
+0

"this.ccc.Text" est null :( – AlexC

2

Vous devez essayer un peu comme ça.

Contrôle c = Page.FindControl (DropDownList1.SelectedValue); // Vous pouvez choisir d'utiliser un autre conteneur que l'instance de page elle-même

Etiquette l = c comme étiquette;

l.Texte = "test";