2009-08-26 8 views
0

DataSet을 만들고 채우는 주 클래스가 있으며이 클래스의 인스턴스는 내 응용 프로그램의 하위 컨트롤에 참조로 전달됩니다. 이 데이터 집합을 사용하여 구성 요소 (이 경우 목록 상자)에 데이터 바인딩 할 수 있습니다. 이것은 Windows 양식 응용 프로그램을위한 것입니다. (프로그래머 차이가 있는지 확실하지 않습니다).Net 목록 상자 데이터 바인딩 문제

channelTypesLB.DataBindings.Add("Text", synData.ds.Tables["ChannelTypes"], "channelType"); 

오류없이 Theres는 내가 볼 수 없습니다 : 나는 또한이 시도했습니다

channelTypesLB.DataBindings.Add("Text", synData.ds, "ChannelTypes.channelType"); 

참고 : Heres는 내가 무엇을 시도하고있다

목록 상자의 데이터 ... synData.ds.Tables["ChannelTypes"].Rows.Count을 출력하면 실제로이 데이터 테이블에 데이터가 있음을 알 수 있습니다.

내가 누락 된 항목이 있습니까? 나는 또한 channelTypesLB.Refresh(); 데이터 바인딩을 설정 한 후

이것은 또한 도움이 될 수 있습니다 ...이 데이터 세트가 만들어 내 메인 클래스의 코드, 나는 오류받은 것은 어쩌면 범위 문제는, 내가 상상하는 것 확실하지 :

private DataSet _ds = new DataSet(); 
public DataSet ds { get { return _ds; } } 

답변

3

목록 상자의 데이터 소스를 설정하기보다는 텍스트 속성에 바인딩하십시오 : 어떤 방법으로 데이터 바인딩 전문가는 아니지만이 방법을 데이터 바인딩에 의해 현재 그것을 컨트롤을하고있는 것으로 생각

channelTypesLB.DataSource = synData.ds; 
channelTypesLB.DisplayMember = "ChannelTypes.channelType"; 

하나의 val을 바인딩하는 데 사용되는 PropertyManager에 바인딩됩니다. 객체의 값을 다른 값으로 변경합니다. DataSource을 설정하면 콜렉션에 바인딩하는 데 사용되는 CurrencyManager에 바인딩해야합니다. 더 ASP.NET 태그가 없기 때문에 내가 여기 윈폼을 믿고있어

Here's a quick overview of WinForms databinding

+0

작동하는 Hrmm ... DataMember 대신 DisplayMember를 사용했습니다 ... –

+0

오타, 그건 오타였습니다 - DataMember와 같은 것은 아니지만 DataBindings를 사용하는 것이 좋습니다. ListBox.DataSource = BindingSource – STW

+0

올바른 방향으로 저를 가리켜 주셔서 감사합니다. –

1

...

channelTypesLB.DataSource = synData.ds.Tables["ChannelTypes"].DefaultView; 
channelTypesLB.DisplayMember = "channelType"; 

그냥 경우는 ASP.NET 그래도 시도한다 :

channelTypesLB.DataSource = synData.ds.Tables["ChannelTypes"].DefaultView; 
channelTypesLB.DataTextField = "channelType"; 
channelTypesLB.DataValueField = "channelTypeId"; // I'm assuming this field exists, replace with your id field 

channelTypesLB.DataBind(); 
+0

예, winforms. 데이터 소스와 DisplayMember가있는 BindingSource를 빌드 할 수 있습니다. 데이터 바인딩이 작동하지 않는 이유는 무엇입니까? –