我有一个combobox
我databinding
到DataTable
,它从数据库中获取数据,如下所示:
SqlDataAdapter adp = new SqlDataAdapter
(@"SELECT [CategoryID],[CategoryName]FROM [Northwind].[dbo].[Categories]",
@"Integrated Security=SSPI;Initial Catalog=Northwind;Data Source=AKSHAY-PC\SQLEXPRESS");
DataTable tbl = new DataTable();
adp.Fill(tbl);
cmbCities.ItemsSource = ((IListSource)tbl).GetList();
cmbCities.DisplayMemberPath = "[CategoryName]";
cmbCities.SelectedValuePath = "[CategoryID]";
当表数据发生更改(添加/删除行)时,combobox
不会刷新,因为IList
没有构建更改通知。
有什么办法可以实现吗?
如果不可能,有没有办法“刷新”数据绑定,以便datatable
再次获取数据。在这种情况下,我将要做的是在初始化窗口时执行上面的代码,然后再次刷新它,而无需再次执行相同的代码。类似于cmbCities.Data.Refresh()
。
答案 0 :(得分:1)
在从数据库中获取数据后,使用ObservableCollection存储数据怎么样?
http://wpflog.blogspot.com/2009/04/very-simple-observablecollection.html
答案 1 :(得分:0)
我有类似的情况检查这个问题:WPF live Update from database。
如果您的要求只是刷新Data Binding,请查看ObservableCollection
答案 2 :(得分:0)
当您单击相应的按钮时,代码将清除并填充sql适配器中的组合框。
XAML:
<Window x:Class="TestApp.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<ComboBox Name="cmbCities" />
<Button Content="Clear" Click="OnClear"/>
<Button Content="Fill" Click="OnFill"/>
</StackPanel>
</Window>
代码背后:
using System;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Windows;
namespace TestApp
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
_adp.Fill(_tbl);
cmbCities.ItemsSource = ((IListSource)_tbl).GetList();
cmbCities.DisplayMemberPath = "[CategoryName]";
cmbCities.SelectedValuePath = "[CategoryID]";
DataContext = this;
}
private void OnClear(object sender, RoutedEventArgs e)
{
_tbl.Clear();
}
private void OnFill(object sender, RoutedEventArgs e)
{
_adp.Fill(_tbl);
}
private DataTable _tbl = new DataTable();
private SqlDataAdapter _adp = new SqlDataAdapter(@"SELECT [CategoryID],[CategoryName]FROM [Northwind].[dbo].[Categories]", @"Integrated Security=SSPI;Initial Catalog=Northwind;Data Source=AKSHAY-PC\SQLEXPRESS");
}
}