第一次尝试数据绑定,但有些东西不起作用。我正在尝试使用此数据库列中的项列表填充组合框。我的数据集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 :(得分:1)
在组合框的XAML声明中添加ItemsSource="{Binding}"
(首选方式)
或做comboBox2.ItemsSource = ds.Tables[0].DefaultView;
(非常傻,但确实有效)
那就是说,请注意,这不是最好的做法。您应该拥有一个ViewModel,它通过命令保存特定于视图的数据及其逻辑。
如果你要绑定它,ViewModel需要实现INotifyPropertyChanged
。通常,您在ViewModel中有一个ObservableCollection,并使用查询结果填充它。然后你就会绑定它。
答案 1 :(得分:0)
编写此代码: -
SqlDataAdapter sqlDa = new SqlDataAdapter(command_string,sql_con);
sqlDa.Fill(ds);
comboBox2.DataSource = ds.Tables[0];
comboBox2.DisplayMember = "clt";
这将显示结果。