Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: DataView не отфильтровывает decimal-поля  (Прочитано 9977 раз)
0 Пользователей и 1 Гость смотрят эту тему.
little
Помогающий

de
Offline Offline
Пол: Мужской

« : 11-09-2007 10:29 » 

Наткнулся на такую проблему:

Есть в проекте DataSet (XSD-шка, подцепленная с MSSQL Server 2005),
в которой есть поле Quantity (на сервере тип объявлен как decimal(18,4)), в xsd-шке, соответственно тип System.Decimal. Ручками в xsd-шку было бобавлено поле _ReviseQuantity, тоже типа System.Decimal.

А теперь проблема: (_v_Doc_Details - типизированная таблица от этой xsd-шки)

Код:
                
DataView dv = new DataView(_v_DocDetails, _v_DocDetails._ReviseQuantityColumn.ColumnName
    + " < " + _v_DocDetails.QuantityColumn.ColumnName, "", DataViewRowState.CurrentRows);
while (dv.Count != 0)
{
    dv[0].Row[_v_DocDetails._ReviseQuantityColumn.ColumnName] =
        (decimal)dv[0].Row[_v_DocDetails.QuantityColumn.ColumnName];
}
Во вьюхе изначально 4 записи. 1-я отфильтровывается нормально, следующая ни в какую. В обеих ячейках значение 135.00, но из вьюхи строка не выпадает. Как это лечить?
« Последнее редактирование: 11-09-2007 11:47 от little » Записан
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #1 : 11-09-2007 12:04 » 

Полазил, посмотрел точнее:
во время отладки, встроенная смотрелка таблиц для второй записи (на кооторой и происходит затык) показывает, что таблица содержит разные значения  - 152.00 против 45.00, когда же я прошу вывести значения самих этих полей - выводит все правильно - 152.00 и 152.00.

Помогло применение _v_DocDetails.AcceptChanges() - но это же не дело, вполне может оказаться, что я не собираюсь менять статус всех (или каких бы то ни было) записей.

Другой способ - ручками в отладке вышел из цикла (когда тот зациклился на невозможности отфильтровать вторую запись из исходных 4-х). Затем в гриде потыкался в ячеки проблемной записи, но не меняя никаких значений (событие CellAfterUpdate не вызывалось). После чего снова вызвал проблемный метод, приведенный в листинге - во вьюху на этот раз попало только 2 записи, т.е. проблемная запись уже отфильтровалась и обработка оставшихся записей прошла без проблем.
Если же я вызывал этот метод не заходя в грид, то во вьхе было 3 записи и зацикливание на проблемной.

на всякий случай привожу значения строк:
Код:
1 -  12.00 - 135.00
2 -  45.00 - 152.00 - (проблемная)
3 -   0.00 - 200.00
4 -   5.00 - 123.00
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 26-12-2007 07:48 » 

Проблема не в DataView, а в твоём алгоритме. Поэтому описывать надо алгоритм работы.

Цитата: little
Ручками в xsd-шку было бобавлено поле _ReviseQuantity, тоже типа System.Decimal.
Вот это что такое? Зачем добавлено, как это с БД соотносится? Это вычисляемое поле?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #3 : 26-12-2007 08:17 » 

Цитата: little
Ручками в xsd-шку было бобавлено поле _ReviseQuantity, тоже типа System.Decimal.
Вот это что такое? Зачем добавлено, как это с БД соотносится? Это вычисляемое поле?
С БД это поле никак не соотносится. Поле было создано для внутренних нужд, чтобы временно хранить вычисления и затем отдать их на обработку с самой таблицей.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines