WPF TextBox不会更新源代码

时间:2010-10-19 22:57:41

标签: wpf data-binding ado.net xsd dataset

我正在尝试制作一个简单的表单,其中包含从我的项目中的数据库中提取的文本框。我在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甚至可以进行这种类型的数据绑定吗?如果您需要了解其他任何内容,请与我们联系。感谢。

3 个答案:

答案 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()”在这种情况下返回了什么,但是你可能需要告诉表保持其更改以便在数据库中查看它们。