Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Binding и dateset


Автор: vlsaf 23.11.2007, 11:33
Удивительная ситуация получается.

Пользоветель в программе меняет поле,
поле связано с полем таблицы через Databinding
но, после того, как я в моей форме поменял значение 
поля на другое, я подумал, раз поле связано с 
полем таблицы через Databinding, то и dataset
должно поменяться. Смотрю, что возвращает

myDataSet.HasChanges() 

Возвращает false. Dataset как будто не поменялось.

Как так? Какая то нестыковка получается?
Или Binding и Dataset не дружат друг с другом?

Автор: vlsaf 23.11.2007, 11:53
Зайду с вопросом с другой стороны.

DataRow и DataRowView я так понимаю, это почти одно и тоже.

Вот такая вот фиговина

DataRowView row = (DataRowView)myTableBindingSource.Current;

Возвращает мою, как бы "временную" строку, которую я изменяю, редактирую и т.д.
Если я редактирую поля, которые связаны с таблицей через Binding, то как раз редактируются
поля DataRowView. 

При этом, если посмотреть на myDataSet.HasChanges(), он возвращает false.

Но как мне в этом случае посмотреть оригинальные значения полей датасета во время редактирования строки?

Автор: thomas 23.11.2007, 13:24
vlsaf, Приветствую.
Попробуй почитать что пишут в msdn:
http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/cpref/html/frlrfsystemdatadatarowviewclasstopic.asp http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/cpref/html/frlrfsystemdatadatarowversionclasstopic.asp, http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/cpref/html/frlrfsystemdatadatarowviewclassrowversiontopic.asp

Я так понимаю, DаtaRowView используется для редактирования значений и возможности отката внесенных изменений.

Автор: vlsaf 23.11.2007, 14:02
Сделать откат внесенных изменений - это одно, и это мне не очень то и нужно.


Предположим, изменения я внес, но еще не записал. Но мне в этот момент надо 
посмотреть оригиналиные значения для моей Row.

И мне не надо делать откат изменений. А надо сравнить строку с изменениями со строкой без изменений 
(с оригиналом). 

Вот как в этом случае достать оригинал?

Автор: thomas 23.11.2007, 15:20
vlsaf, 
Так по первой сслылке есть пример
Код

 // Change values in the table. 
   myTable.Rows[0].BeginEdit();
   myTable.Rows[0]["col1"]= "New Component";
   myTable.Rows[0]["col2"]= 100;
   // Print the proposed values.
   if(myTable.Rows[0].HasVersion(DataRowVersion.Proposed)){
      Console.WriteLine(myTable.Rows[0]["col1", DataRowVersion.Proposed]);
      Console.WriteLine(myTable.Rows[0]["col2", DataRowVersion.Proposed]);
   }
   // Print the original values.
   if(myTable.Rows[0].HasVersion(DataRowVersion.Original)){
      Console.WriteLine(myTable.Rows[0]["col1", DataRowVersion.Original]);
      Console.WriteLine(myTable.Rows[0]["col2", DataRowVersion.Original]);
   }
   // Cancel the edit.
   myTable.Rows[0].CancelEdit();
   // Print the Current values.
   if(myTable.Rows[0].HasVersion(DataRowVersion.Current)){
      Console.WriteLine(myTable.Rows[0]["col1", DataRowVersion.Current]);
      Console.WriteLine(myTable.Rows[0]["col2", DataRowVersion.Current]);
   }
   // Try to print the proposed values again--gone after cancel edit.
   // Print the proposed values.
   if(myTable.Rows[0].HasVersion(DataRowVersion.Proposed)){
      Console.WriteLine(myTable.Rows[0]["col1", DataRowVersion.Proposed]);
      Console.WriteLine(myTable.Rows[0]["col2", DataRowVersion.Proposed]);
   }

Сделай что-то подобное, но значения выводи, к примеру, в MessageBox. Не знаю какой у тебя GUI, сам прикинь на какой обработчик события это "повесть". Там кнопочку прикрутить или комбинацию клавиш.
Что-то типа такого
Код

DataRowView row = (DataRowView)myTableBindingSource.Current;
if(row.HasVersion(DataRowVersion.Original))
{
      MessageBox.Show(row[0].ToString() + " :" + row[1].ToSting(), "оригинальное значение данных в строке")
 }

Автор: vlsaf 24.11.2007, 12:31
Молоток.

Я бы тебе репутацию поднял, да вот ста постов нет.

Спасибо!


А я что-то тормознул не на шутку.

Автор: thomas 24.11.2007, 18:36

vlsaf, 
Я рад тому, что помог небольшой подсказкой решить твою проблему.
Успехов.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)