2011-04-19 2 views
0

데이터베이스에서 드롭 다운 목록으로 내 프로젝트 디스플레이의 프로그램 이름과 각 프로그램에 ID가 있습니다. 드롭 다운 목록에 이름과 ID를 모두 표시하여 서로 구분할 수있게하려고합니다. 예 : 'california lifeline (CLA)' 여기서 'california lifeline'은 프로그램 이름이고 id는 'CLA'입니다. 프로그램 ID를 기반으로 데이터를 표시하는 저장 프로 시저를 만들었습니다.드롭 다운 목록 컨트롤에 프로그램의 이름과 ID를 모두 표시하는 방법

내 드롭 다운 목록 컨트롤의 코드입니다.

private void LoadProgramName() 
{ 
    _drp_program = (DropDownList)Page.FindControl("bodyuc$drp_program"); 

    dsprg = rProxy.GlobalFetchFromDB(strCountyName, "DBO.oea_sp_get_onoff_programNames"); 

    _drp_program.DataSource = dsprg; 
    _drp_program.DataTextField = "PROG_NAME"; 
    _drp_program.DataValueField = "PROGRAM_ID"; 
    _drp_program.DataBind(); ; 

    ListItem lst_prog = new ListItem(); 
    lst_prog.Value = ""; 
    lst_prog.Text = "--Select One--"; 
    _drp_program.Items.Insert(0, lst_prog); 
    _drp_program.Items.Insert(1, "ALL"); 

} 

알아두기, 드롭 다운은 페이지 컨트롤의 일부입니다.

도움말은 Appriceated입니다.

+0

안녕하세요 @user 사용자가 몇 가지 질문을 읽고 프로그래밍중인 내용이 비 유사 항목 인 것처럼 보입니다. 이익. 그냥 좀 이상하다고 생각했습니다. 너무 많은 정보를 줄 필요가 없다면 어떤 회사가 귀하의 업무를 수행합니까? – Earlz

답변

0

GlobalFetchFromDB()가 부분 클래스로 "확장"할 수있는 객체의 인스턴스를 반환하는 경우 표시된 문자열의 형식을 지정하는 클래스에 "도우미"속성을 추가합니다.

하나의 이점은 형식이 인스턴스의 다른 속성 값에 종속 될 수 있다는 것입니다. 예를 들어

:

public partial class ProgramItem 
{ 
    public string DisplayName { get { return PROG_NAME.ToUpper(); } } 
} 

그럼 _drp_program.DataTextField = "DisplayName";

대안을 사용 반환 항목을 캡슐화하고 장식으로 표시 이름을 추가 클래스를 생성하는 것이다.

0

_drp_program을 dsprg에 바인딩하는 대신 dsprg에서 결과를 반복하고 각 항목을 개별적으로 추가하십시오. 당신은

_drp_program.DataSource = from item in dsprg 
          select new 
          { 
           PROG_NAME = string.Format("{0}({1})", item.PROG_NAME, item.PROGRAM_ID) , 
           PROGRAM_ID = item.PROGRAM_ID 
          }; 

대신

_drp_program.DataSource = dsprg; 
+0

나중에 SelectedItem에 GlobalFetchFromDB()에서 반환 된 개체의 인스턴스로 액세스 할 필요가없는 경우에만 좋습니다. ID 값 이외의 반환 된 객체에서 모든 정보를 잃어 버렸습니다. –

0

약간 어렵다). 또한 코드에서 컨트롤을 바인딩하기 때문에 코드에서 ID와 이름을 연결하고 수동으로 드롭 다운 목록을 채울 수 있습니다 (Items.Insert를 호출하거나 연결된 값을 포함하는 필드/속성을 가진 컬렉션에 드롭 다운을 바인딩하여)). AFAIK, DataTextField 및 DataValueField, 표현식 등의 필드/속성 이름 만 지정할 수 있습니다.

+0

이 오류 메시지는 다음과 같습니다. 원본 형식 'System.Data.DataSet'에 대한 쿼리 패턴 구현을 찾을 수 없습니다. '선택'을 찾을 수 없습니다. – userstackoverflow

0

일반적으로 가장 빠른 방법은 SQL 쿼리에 ID와 이름을 연결하는 시도 할 수 있습니다 (하지만 그건 있도록 SP를 사용하고

foreach(dsprgObject in dsprg) 
{ 
    _drp_program.Items.add(new ListItem(dsprgObject .ColA + " " + dsprgObject .ColB, dsprgObject.PROGRAM_ID)); 
}