WPF TextBox не будет обновлять источник - PullRequest
2 голосов
/ 20 октября 2010

Я пытаюсь сделать простую форму, которая содержит текстовые поля, которые рисуются из БД в моем проекте. Я использую метод GetData () адаптера таблицы в файле xsd для заполнения контекста данных. Я хочу обновить одно из этих текстовых полей и отразить изменения в базе данных. Текстовые поля заполняются нормально, но изменения не возвращаются в БД.

У меня есть этот код в моем конструкторе для класса окна

        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 ]

2 голосов
/ 20 октября 2010

adapter.GetData() вернет DataSet, содержащий данные из базы данных. Этот набор данных отсоединен от вашей базы данных , т. Е. Изменения, внесенные в набор данных, не распространяются автоматически обратно в базу данных.

Чтобы сохранить изменения обратно в базу данных, вы можете использовать Update метод вашего DataAdapter .

Таким образом, фактически ваша проблема не имеет ничего общего с WPF: так работает доступ к базе данных через адаптеры данных ADO.NET.

1 голос
/ 20 октября 2010

Ваш адаптер получает данные - adapter.GetData() - и текстовое поле устанавливает значение в ваших данных - table.name, как говорит @Reed. Возвращенные данные представляют ваши данные в базе данных. Подумайте об этом, как будто кто-то просит отчет из БД и получает кучу бумажных отчетов.

Однако нет ничего, что могло бы спровоцировать сохранение ваших данных в БД. Вы, вероятно, хотите что-то, чтобы сохранить данные так же, как вы это получили.

Поскольку текстовое поле может измениться либо при изменении фокуса, либо даже при вводе буквы (по умолчанию это фокус), вам, вероятно, понадобится что-то еще для сохранения данных. Вы действительно хотите сохранять его на БД при каждом нажатии клавиши?

WPF выполняет привязку к объектам, но не к базе данных.

Если вы действительно хотите сохранить его при смене фокуса, вы можете отреагировать на это событие. В противном случае добавьте кнопку «Сохранить», которая будет использоваться после заполнения форм.

0 голосов
/ 20 октября 2010

Изменения должны быть отражены в «table.name».

Я не знаю, что возвращает «adapter.GetData ()» в этой ситуации, но, вероятно, вам потребуетсяпопросите таблицу сохранить изменения, чтобы увидеть их в БД.

...