2012-02-06 73 views
1

嘗試第一次數據綁定,但有些不起作用。我正試圖用此數據庫列中的項目列表填充組合框。我的數據集ds顯示它裏面有東西(調試器顯示它的計數大約是1500,應該在那裏的項數),如果我用一個閱讀器使用相同的連接字符串,我可以打印出所有應該出現在組合框中的東西。雖然組合框是空的,任何想法?爲什麼我的數據綁定工作不正常?

<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> 

而且現在的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; 

所有的代碼執行沒有任何異常。

+0

嘗試'combobox2.ItemsSource = ds.Tables [0] .DefaultView',同時確保每個項目的綁定具有'clt' proeprty,基本上嘗試以下綁定文本框並告訴我們顯示的是什麼'文本=「{Binding}」' – sll 2012-02-06 10:10:04

回答

1

無論是在你的組合框的XAML聲明添加ItemsSource="{Binding}"(首選方式)

或做comboBox2.ItemsSource = ds.Tables[0].DefaultView;(相當愚蠢的,但它的工作)

不過,請注意,這是不是最好的做法。您應該擁有一個ViewModel,該ViewModel通過命令保存特定於視圖的數據及其邏輯。

如果你要綁定它,ViewModel需要實現INotifyPropertyChanged。通常情況下,您將在該ViewModel中擁有一個ObservableCollection,並將其填入查詢的結果中。然後你會綁定它。

+0

謝謝,我設法弄清楚我需要ItemsSource =「{Binding}」,儘管我認爲你是對的,不是一個好辦法,因爲我已經選擇總是出現在組合框的選定區域,就像System.Collections ...等一樣(煩惱是因爲SQL服務器位於不是互聯網連接的Intranet上,所以無法同時運行並聯機) 。我不熟悉ViewModel,所以我猜這意味着更多的閱讀對我來說 – cost 2012-02-06 10:28:35

+1

谷歌關於MVVM模式,它被教會了一個荒謬的數量;) – 2012-02-06 10:37:22

0

寫這樣的代碼: -

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

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

這將顯示結果。

+0

這是一個WPF問題,而不是winforms。您的代碼甚至不會編譯(DataSource不存在於WPF組合框上) – 2012-02-06 10:45:10