2012-02-06 3 views
1

처음으로 데이터 바인딩을 시도했지만 어떤 것이 작동하지 않습니다. 나는이 데이터베이스 열의 항목 목록으로 콤보 상자를 채우려고합니다. 내 데이터 집합 ds에 물건이 있음을 보여줍니다 (디버거에 표시되는 항목의 수는 약 1500이고 거기에 있어야 함). 독자와 동일한 연결 문자열을 사용하면 모든 항목을 인쇄 할 수 있습니다. 콤보 박스에 나타나야하는 것들. 콤보 상자가 비어 있지만 아이디어가 있습니까? 이제 C#내 데이터 바인딩이 작동하지 않는 이유는 무엇입니까?

DataSet ds = new DataSet(); 

     string con_string = "user id=sql;password=pass;Server=xxx.xxx.xxx.xxx,xxxx;Database=db;Trusted_Connection=False;connection timeout=15"; 
     string command_string = "SELECT clt FROM Client"; 
     SqlConnection sql_con = new SqlConnection(con_string); 

      SqlCommand command = new SqlCommand(command_string, sql_con); 
      SqlDataAdapter sqlDa = new SqlDataAdapter(); 
      sqlDa.SelectCommand = command; 
      sqlDa.Fill(ds); 
      comboBox2.DataContext = ds.Tables[0].DefaultView; 

<ComboBox Height="23" HorizontalAlignment="Left" Margin="24,318,0,0" Name="comboBox2" VerticalAlignment="Top" Width="190" IsEditable="True" > 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding clt}" Width="100" /> 
       </StackPanel> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

그리고 모든 코드는 예외없이 실행합니다.

+0

'combobox2.ItemsSource = ds.Tables [0] .DefaultView'를 시험해보고, 각 항목에 대한 바인딩이'clt' proeprty를 가지고 있는지 확인하고, 기본적으로 텍스트 상자에 바인딩을 시도하고 표시되는 내용을 말하십시오.'Text = "{Binding}"{ – sll

답변

1

어느 당신의 콤보 상자의 XAML 선언에 ItemsSource="{Binding}"를 추가 (선호하는 방법)

또는 comboBox2.ItemsSource = ds.Tables[0].DefaultView; 할 (아주 바보 같은,하지만하지 작업)이 가장 좋은 방법이 아닙니다 유의하시기 바랍니다 말했다

. 뷰에 대한 데이터와 명령을 통한 논리를 보유하는 ViewModel이 있어야합니다.

바인딩 할 경우 ViewModel에서 INotifyPropertyChanged을 구현해야합니다. 일반적으로 ViewModel에 ObservableCollection이 있고 쿼리의 결과로 채울 수 있습니다. 그럼 그걸 묶을거야.

+0

감사합니다. ItemsSource = "{Binding}"이 필요하다는 것을 알아 냈습니다.하지만 제가 생각한 바에 따르면, 선택된 콤보 박스의 선택된 영역에 System.Collections ... 등으로 표시됩니다 (성가시는 SQL 서버가 인터넷에 연결된 인트라넷에 있지 않으므로 동시에 실행할 수없고 동시에 온라인 상태 일 수 있음) . ViewModel에 익숙하지 않아서 나를위한 더 많은 읽을 거리를 의미합니다. – cost

+1

구글은 MVVM 패턴에 대해 말합니다. 우스운 이야기입니다. –

0

쓰기이 코드 : -

SqlDataAdapter sqlDa = new SqlDataAdapter(command_string,sql_con); 
     sqlDa.Fill(ds); 

     comboBox2.DataSource = ds.Tables[0]; 
     comboBox2.DisplayMember = "clt"; 

이 결과를 표시합니다.

+0

winforms가 아닌 WPF 관련 질문입니다. 코드가 컴파일되지 않습니다 (DataSource는 WPF ComboBox에 없습니다) –

관련 문제