我正在尝试制作一个简单的表单,其中包含从我的项目中的数据库中提取的文本框。我在xsd文件中使用表适配器的GetData()方法来填充数据上下文。我想更新其中一个文本框,并将更改反映在数据库中。文本框填充正常,但更改不会使其返回到数据库。
我在窗口类的构造函数中有这段代码
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甚至可以进行这种类型的数据绑定吗?如果您需要了解其他任何内容,请与我们联系。感谢。
答案 0 :(得分:2)
adapter.GetData()
将返回包含数据库中数据的DataSet
。 此数据集与数据库分离,即对数据集所做的更改不会自动传播回数据库。
要将更改保存回数据库,您可以使用Update
method of your DataAdapter。
事实上,你的问题与WPF无关:这就是通过ADO.NET数据适配器进行数据库访问的方式。
答案 1 :(得分:1)
您的适配器正在获取数据 - adapter.GetData()
- 您的文本框正在设置数据中的值 - table.name
,正如@Reed所说。返回的数据表示数据库中的数据。可以想象它就像有人要求数据库提交报告并获得一堆纸质报告。
但是,没有什么可以触发您的数据保存到数据库。您可能希望以与获取数据相同的方式保存数据。
由于您的文本框可能会在您更改焦点时更改,或者甚至在您键入字母时(默认情况下是焦点),您可能还需要其他内容来保存数据。你真的想在每次按键时将它保存到数据库吗?
WPF对对象进行绑定,但通常不对数据库进行绑定。
如果您确实希望在更改焦点时保存它,那么您可以对该事件作出反应。否则,添加“保存”按钮,以便在填写表格后使用。
答案 2 :(得分:0)
更改应反映在“table.name”中。
我不知道“adapter.GetData()”在这种情况下返回了什么,但是你可能需要告诉表保持其更改以便在数据库中查看它们。