2010-10-19 75 views
2

我想做一個簡單的表單,其中包含從我的項目中的數據庫中繪製的文本框。我在xsd文件中使用表適配器的GetData()方法來填充數據上下文。我想更新其中一個文本框,並將更改反映在數據庫中。文本框填充正常,但更改不會回到數據庫。WPF文本框將不會更新源

我在構造函數中的代碼窗口類

 table = adapter.GetData(); 
     this.DataContext = table; 

而在XAML中,我結合到一個列表框

<ListBox Name="lstItems" ItemsSource="{Binding}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBox Text="{Binding Path=name, Mode=TwoWay, 
        UpdateSourceTrigger=LostFocus}">       
       </TextBox> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

我一直是這樣瞎搞了一段時間,只是不能得到它。它看起來應該相當簡單。我錯誤地認爲wpf甚至可以做這種類型的數據綁定?讓我知道你是否需要知道其他事情。謝謝。

回答

2

adapter.GetData()將返回包含來自數據庫的數據的DataSet該數據集與數據庫分離,即對數據集所做的更改不會自動傳播回數據庫。

要將更改保存回數據庫,您可以使用Update method of your DataAdapter

因此,事實上,您的問題與WPF無關:這就是通過ADO.NET數據適配器訪問數據庫的原理。

+0

好的,謝謝你清理那個。我不太熟悉那裏所有類型的數據訪問方法,但是有沒有更接近我想象的方法? – wangburger 2010-10-20 00:22:45

+1

*實體框架*似乎是WPF數據綁定的「最先進的」方法,但我沒有親身體驗過它。無論如何,我認爲你還需要在那裏明確地調用「保存更改」命令。 – Heinzi 2010-10-20 09:33:28

0

這些更改應反映在「table.name」中。

我不知道在這種情況下「adapter.GetData()」返回的是什麼,但很可能您需要告訴該表保留其更改才能在數據庫中看到它們。

1

您的適配器正在獲取數據 - adapter.GetData() - 並且您的文本框將按照@Reed所述設置數據中的值 - table.name。返回的數據是數據庫中數據的表示。想想它就像有人要求從數據庫的報告,並獲得了一堆紙質報告。

但是,沒有什麼能夠觸發你的數據被保存到數據庫。您可能想要以與獲取數據相同的方式保存數據。

由於您的文本框可能在更改焦點時發生變化,或者即使您鍵入字母(默認情況下它是焦點),您可能還需要其他東西來保存數據。你真的想每次擊鍵都把它保存到數據庫嗎?

WPF執行與對象的綁定,但通常不會與數據庫綁定。

如果您確實希望在改變焦點時保存它,那麼您可以對該事件做出反應。否則,添加一個「保存」按鈕,在表格填寫完畢後使用。