2010-01-29 5 views
6

비즈니스 클래스에이 코드가 있습니다.DropDownList를 ListItemCollection에 바인딩하고 DDL에 값을 추가하지 않음

internal ListItemCollection GetAllAgents() 
    { 
     DataTable table = dao.GetAllAgents(); 
     ListItemCollection list = new ListItemCollection(); 

     foreach (DataRow row in table.Rows) 
     { 
      list.Add(new ListItem(row["agent_name"].ToString(), row["id"].ToString())); 
     } 
     return list; 
    } 

나는 문제없이 dao에서 테이블을 되 찾는다. 나는 텍스트를보고 (굉장한 illiteration에 대한 +1을?) 속성이 제대로 채울 값과 프리젠 테이션으로 돌아 내가 선택한 값을

this.ddlAgent.SelectedValue 

I를 얻을 할 때 나는이

Helper helper = new Helper(); 
ListItemCollection agentList = helper.GetAllAgents(); 
agentList.Insert(0,""); 
this.ddlAgent.DataSource = agentList; 
this.ddlAgent.DataBind(); 

처럼 바인딩 에이전트 ID를 볼 수 있지만 텍스트 (에이전트 이름)를 얻으려고 했으므로 이것을 시도했습니다.

this.ddlAgent.SelectedItem.Value 

그러나 동일한 결과가 나타납니다. 그런 다음 생성되는 html 소스를 살펴 보았습니다.이 모양은 다음과 같습니다.

<select name="ctl00$ContentPlaceHolder1$ddlAgent" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$ddlAgent\',\'\')', 0)" id="ctl00_ContentPlaceHolder1_ddlAgent"> 
     <option selected="selected" value=""></option> 
     <option value="agent1_name">agent1_name</option> 
     <option value="agent2_name">agent2_name</option> 

이 패턴은 모든 에이전트에서 계속됩니다. 나는 당신이 나의 문제를 해결할 때 나는 단지 뼈를 향한 방향으로 나아갈 것을 기대하고있다. :

고마워.

편집 : 나는이

ListItemCollection agentList = helper.GetAllAgents(); 
agentList.Insert(0,""); 
foreach (ListItem agent in agentList) 
{ 
    this.ddlAgent.Items.Add(agent); 
} 

처럼 할 경우는 그것을 잘 작동합니다. 일을

답변

15

시도 :

this.ddlAgent.DataTextField = "Text"; 
this.ddlAgent.DataValueField = "Value"; 
this.ddlAgent.DataSource = agentList; 
this.ddlAgent.DataBind(); 

도 작동해야하고, 그것은 아무 이유 목록을 반복 것보다 아마 더 낫다.

업데이트이 일을 다른 (짧은) 방법을 찾았 Items.AddRange()를 사용하는 대신 DataSource와 소스를 설정하여

this.ddlAgent.Items.AddRange(agentList.ToArray()); 
this.ddlAgent.DataBind(); 

를, ASP는이 TextValue 속성을 사용한다는 것을 알아낼 수있다 .

+0

그 티켓이 ... 나는 왜 이런 식으로 할까? – jim

+0

DropDownList가 텍스트 및 값으로 사용할 필드를 지정해야합니다. 자동으로 수행되는 것처럼 보입니다 (새 ListItem을 작성하는 매개 변수도 값 및 텍스트라고도 함)하지만 명시 적이어야합니다. – Farinha

+0

신비를 제거해 주셔서 감사합니다. – jim

6

agentList가 ListItemCollection 인 경우 다음 코드는 this.ddlAgent.DataBind();

this.ddlAgent.Items.AddRange(agentList.Cast<ListItem>().ToArray()) ; 
관련 문제