WPF组合框数据绑定到DataTable,自动刷新
问题描述:
我有一个combobox
,我databinding
到DataTable
其从数据库中获取数据,如下所示:WPF组合框数据绑定到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()
。
答
如何使用ObservableCollection在从数据库中获取数据后存储数据?
http://wpflog.blogspot.com/2009/04/very-simple-observablecollection.html
答
下面的代码将清除,并填写您的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");
}
}
感谢华尔街,但我仍然要点击按钮查看更新。 – 2011-02-26 04:26:29
我添加了按钮,可以让您轻松查看您的数据库是否需要使用。这是示例代码,我希望你能够学习并适应你的具体需求。 所以这里是如何使用它在你的情况给你的问题:你应该在你的代码中调用_tbl.Clear()后跟_adp.Fill(_tbl)在某些函数中,当你需要刷新数据绑定时调用,因为底层数据已经改变。 – 2011-02-28 16:07:20