2009-09-21 2 views
0

나는 C#에서 문제가 제발 도움말 :C#을 변수, .NET

나는 드롭 다운 목록과 일부 레이블과

DDL 각을 ListItem 값은 각 레이블의 ID와 동일 예

   <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> 

질문 :

,536,
private Label ccc; 

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

내 코드는 내가 원하는 것이 아닙니다.

나는 DDL에서 selectet 항목 값 (DropDownList1.SelectedValue.ToString())를 얻을 어떤 변수 (this.ccc)에 넣고 싶은 그 후 나는 같은 ID로 레이블을 호출합니다.

논리적 나는 이런 식으로 뭔가를 원하는 :

this.ccc = DropDownList1.SelectedValue.ToString(); (내 경우 this.ccc = "RouteA")

this.ccc.Text = "test"(내 경우) (this.ccc.Text = "42");

대단히 감사합니다. 이해 하셨다면 제발 도와주세요 !! 이것에 대해

+1

죄송하지만이 사실을 이해할 수 없습니다. –

+0

선택을 받고 싶습니다.을 ListItem에서 값이 동일 변수 을 넣고 그 후 동일한 ID를 가진 LABEL 전화 자바 논리 예컨대 VAR 시험 = selectet.item.val; Label.TEXT = test.Text; – AlexC

+0

드롭 다운 목록의 이름을 DropDownList1보다 조금 더 구체적으로 지정해야한다고 생각합니다. 경로가 포함되어 있으면 routeDropDownList와 같은 식으로 호출하지 않으시겠습니까? – Joren

답변

2

내가 제대로 이해하고 모르겠지만, :

// 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

레이블 label = FindControl (labelId)을 레이블로; 컴파일 후 labelID (null) – AlexC

+0

죄송합니다. 귀하의 의견을 통해 저에게 무엇을 말하려고하는지 이해하지 못합니다. – M4N

2

방법 :

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

난 당신이 Page.FindControl을 찾고 생각합니다.

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

나는 당신이 정의에 의해 문자열이기 때문에 SelectedValue 재산 ToString()를 호출 할 필요는 생각하지 않는다. 당신은 제프 앳 우드의 재귀 FindControl 메서드를 사용할 수 있도록 컨트롤, 페이지 계층 구조 내에서 깊은있는 기회가

은 (자신의 일에서 도난 그의 blog articles) :

:

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; 
} 

코드는 변경됩니다

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

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

2

당신은 이것을 약간 좋아할 필요가 있습니다.

컨트롤 c = Page.FindControl (DropDownList1.SelectedValue); // 페이지 인스턴스 자체가 아닌 다른 컨테이너를 사용할 수 있습니다.

레이블로 l = c;

l.Text = "test";

관련 문제