如何刷新ComboBox绑定到数据库

时间:2014-07-28 06:41:45

标签: c# wpf combobox observablecollection inotifypropertychanged

我有一个使用数据集表适配器填充的组合框。我有一个文本框和旁边的按钮。单击此按钮,文本框值将添加到数据库中。我想在任何新条目完成后刷新我的Combobox。我做了我的研究并发现我必须创建一个ObservableCollection并用DB中的数据填充它。但由于我正在使用数据集,因此每个表的所有类都已存在。

这是我的代码:

XAML

<ComboBox Name="service" SelectedValuePath="Id" DisplayMemberPath="Service" ></ComboBox>
<TextBox Name="txtTobeAdded"></TextBox>
<Button Name="add" Content="Add" Click="add_Click"></Button>

C#

public partial class Window3 : Window
{

    private SqlDatatsetTableAdapters.ServicesTableAdapter tableAdapterServices = new SqlDatatsetTableAdapters.ServicesTableAdapter();

    public Window3()
    {
        InitializeComponent();
        System.Data.DataView vw = tableAdapterServices.GetData().DefaultView;
        service.ItemsSource = vw;
        service.SelectedIndex = 0;
    }

    private void add_Click(object sender, RoutedEventArgs e)
    {
        tableAdapterServices.InsertQuery(txtTobeAdded.Text);
    }
}

2 个答案:

答案 0 :(得分:0)

尝试:

private void add_Click(object sender, RoutedEventArgs e)
{
    tableAdapterServices.InsertQuery(txtTobeAdded.Text);
    service.ItemsSource = tableAdapterServices.GetData().DefaultView;;
    service.SelectedIndex = 0;
}

它是一个懒惰的解决方案,将值推回到组合框中。如果您想学习使用可观察集合的方法,您将不得不查看数据绑定和MVVM设计模式。 More Info Found here

答案 1 :(得分:0)

您的场景:无论数据库的哪些更改都必须反映到组合框..

解决方案1:只需将另一个表单调用为ShowDialog()而不是Show(),并在子表单关闭后再次绑定组合框的数据源。因为你可以再次查询数据库并再次检索数据。

解决方案2:只需拥有一个静态List,并使用Parent构造函数从子表单中将新添加的值发送到Parent表单。