2011-02-24 96 views
1

我有一個combobox,我databindingDataTable其從數據庫中獲取數據,如下所示: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()

回答

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"); 

    } 
} 
+0

感謝華爾街,但我仍然要點擊按鈕查看更新。 – 2011-02-26 04:26:29

+0

我添加了按鈕,可以讓您輕鬆查看您的數據庫是否需要使用。這是示例代碼,我希望你能夠學習並適應你的具體需求。 所以這裏是如何使用它在你的情況給你的問題:你應該在你的代碼中調用_tbl.Clear()後跟_adp.Fill(_tbl)在某些函數中,當你需要刷新數據綁定時調用,因爲底層數據已經改變。 – 2011-02-28 16:07:20