2013-12-14 3 views
0

ListBox를 확장하여 CustomListBox를 작성했습니다.ValueMember로 ListBox 바인딩하기

데이터 원본으로 classobject 배열을 받아들이고 Classobject 배열을 읽음으로써 표시하도록 OnDrawItem()을 재정의합니다.

여기까지 모든 것이 잘 작동합니다. 문제는 목록 상자의 ValueMember를 할당 할 수 없기 때문에 ValueItem을 읽을 수 없다는 것입니다. 나는 값 회원

의사 코드로 내 classObject의 재산 중 하나를 추가 할 :

public class myModel 
{ 
    int id; 
    string name; 
    XXXXXXXXX 
    XXXXXXXXX 
} 

myModel[] ds = getData(); 
//myCustomListbox.ValueMember = "id"; //this doesnt seem to work 
myCustomListbox.DataSource =ds; 

내가 반복합니다의 OnDrawItem()가 필요한 디스플레이 값을 그릴 것입니다. 값 항목을 추가하기 위해 내가 재정의 할 수있는 방법이 있습니까?

답변

0

바인딩은 속성으로 만 작동합니다. 부동산에 필드를 변경 (하고 있는지 확인이 공개 - 기본 반원들에게 비공개로)

public class myModel 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    // ... 
} 

이제 모두 확인해야한다 :

myModel[] ds = getData(); 
myCustomListbox.ValueMember = "id"; 
myCustomListbox.DataSource = ds; 

이 BTW C# naming guidelines이 속성에 대한 파스칼의 이름을 사용하는 것이 좋습니다 , 메소드 및 유형 이름.

+0

예 getter 및 setter가 있지만 여전히 작동하지 않습니다. – Robert

+0

@ 램은 귀하의 재산을 공개로 표시합니까? 또한 당신은 가치 회원을 읽는 방법을 보여줄 수 있습니까? –

+0

예 그들은 모두 public이고 값은 항상 비어 있습니다 (항목을 클릭 한 후). SelectedIndexChanged 이벤트 내에서 'string a = myCustomListBox.ValueMember' – Robert

0

값 멤버를 추가하려면 C# (Windows 응용 프로그램)의 데이터 테이블로 ListBox 바인딩이 필요합니다.

우리는 상기 코드에 대한 출력

System.Data.DataRowView

아래에 주어진 다음과 같은 값 부재없이 코드

private void button1_Click(object sender, EventArgs e) 
    { 
     SqlDataAdapter da = new SqlDataAdapter("select * from Table1",con); 
     da.Fill(dt); 

     listBox1.DataSource = dt; 
     // listBox1.ValueMember = "data"; //data is one of the coloumn of the table... 

    } 

을하면

System.Data.DataRowView

System.Data.DataRowView

private void button1_Click(object sender, EventArgs e) 
    { 
    SqlDataAdapter da = new SqlDataAdapter("select * from Table1",con); 
    da.Fill(dt); 
    listBox1.DataSource = dt; 
    listBox1.ValueMember = "data"; //data is one of the coloumn of the table... 
    } 

출력 될 것이다 ..

특정 항목의리스트를 다음과 같이 우리가 코드 값 부재를 제공하는 경우 테이블에. 여기 '데이터'.

관련 문제