2010-10-29 88 views
2

好的,所以我對WPF和數據綁定相當陌生,但是我已經搜索並搜索了,似乎無法找到對此的答案。雙向綁定到數據集 - 更新數據庫?

我有一個數據庫(稱爲庫存)和一個數據集(稱爲DevicesDataSet)。我正在嘗試將數據集綁定到列表框,以便可以選擇DevicesDataSet的Devices表中的特定設備,並將其屬性顯示在TextBox中進行編輯。

以下是XAML我迄今爲止:

<Window x:Class="Inventory.SignOutDevice" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="SignOutDevice" Height="339" Width="392" xmlns:my="clr-namespace:Inventory" Loaded="Window_Loaded"> 
<Window.Resources> 
    <my:DevicesDataSet x:Key="devicesDataSet" /> 
    <CollectionViewSource x:Key="devicesViewSource" Source="{Binding Path=Devices, Source={StaticResource devicesDataSet}}" /> 
</Window.Resources> 
<Grid DataContext="{StaticResource devicesViewSource}"> 
    <ListBox Height="237" HorizontalAlignment="Left" Margin="12,12,0,0" Name="listBox1" 
      VerticalAlignment="Top" Width="254" ItemsSource="{Binding}" SelectedValuePath="Selected"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Path=Make}"/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
    <TextBox Margin="223,267,0,0" Text="{Binding Path=Make, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
</Grid> 

每當一個裝置被選擇和屬性被編輯(我只顯示此刻一個特性),列表框已更新,但數據集(數據庫?)似乎不是。也就是說,當我離開表單然後回到它時,列表框會返回到它的原始狀態。

所以我想問題是:我如何使這些更改持久/寫入數據庫?

編輯:DERP,這裏是更新後的後端C#:

using System.Windows; 
using System.Data; 
namespace Inventory 
{ 
    public partial class SignOutDevice : Window 
    { 
     DevicesDataSet devicesDataSet = null; 
     Inventory.DevicesDataSetTableAdapters.DevicesTableAdapter devicesDataSetDevicesTableAdapter = null; 
     public SignOutDevice() 
     { 
      InitializeComponent(); 
     } 
     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      devicesDataSet = ((Inventory.DevicesDataSet)(this.FindResource("devicesDataSet"))); 
      devicesDataSetDevicesTableAdapter = new Inventory.DevicesDataSetTableAdapters.DevicesTableAdapter(); 
      devicesDataSetDevicesTableAdapter.Fill(devicesDataSet.Devices); 
      System.Windows.Data.CollectionViewSource devicesViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("devicesViewSource"))); 
      devicesViewSource.View.MoveCurrentToFirst(); 
     } 

     private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
     { 
      devicesDataSet.AcceptChanges(); 
      devicesDataSetDevicesTableAdapter.Update(devicesDataSet.Tables["Devices"].Select(null, null, DataViewRowState.Deleted)); 
      devicesDataSetDevicesTableAdapter.Update(devicesDataSet.Tables["Devices"].Select(null, null, DataViewRowState.ModifiedCurrent)); 
      devicesDataSetDevicesTableAdapter.Update(devicesDataSet.Tables["Devices"].Select(null, null, DataViewRowState.Added)); 
     } 

    } 
}

回答

0

好吧,算出來。在devicesDataSetDevicesTableAdapter中發現自動生成的Update()方法實際上沒有做任何事情。使用查詢嚮導創建了一個自定義方法,現在一切正常。

0

您是否在輸出窗口看着檢查裝訂錯誤?因爲它看起來像你有一個。 TextBox綁定到Make屬性,但其DataContextdevicesViewSource資源。沒有任何內容與ListBox中的選定項目相關聯。

將兩者聯繫起來的方法是指定ListBox的名稱,然後將TextBox上的綁定設置爲{Binding ElementName=MyListBox, Path=Make, Mode=TwoWay}

+0

該部分工作得很好,當我編輯文本框時,ListBox也被更新。我的問題不在於界面,而是數據庫未被更新。此外,ListBox已經有一個名稱:「listBox1」。 – 2010-10-29 18:12:35