При разработке веб-сайтов, использующих типобезопасные наборы данных (strongly typed datasets), иногда возникают ситуации, когда необходимо добавить дополнительные колонки, логика которых не связана напрямую с данными из базы. В данном случае, разработчик столкнулся с проблемой, когда столбец базы данных Do_Not_Estimate_Flag имел значения T или F, и было необходимо добавить колонку ESTIMATION_ALLOWED в набор данных, не изменяя при этом исходную таблицу или логику заполнения данных.
Описание проблемы
Разработчик использовал частичные классы для модификации типобезопасного набора данных, но столкнулся с проблемой: при загрузке данных через DataBinder.Eval, значение из дополнительной колонки ESTIMATION_ALLOWED игнорировалось в пользу значений из исходной строки набора данных.
Пример кода
Код, предоставленный разработчиком, демонстрировал добавление колонки ESTIMATION_ALLOWED в частичный класс MyFunkyDataTable и определение свойства ESTIMATION_ALLOWED в частичном классе MyFunkyRow, которое возвращало строку "Yes" или "No" в зависимости от значения DO_NOT_EST_FLAG.
partial class MyFunkyRow
{
public string ESTIMATION_ALLOWED
{
get
{
if(DO_NOT_EST_FLAG == "N")
{
return "Yes";
}
return "No";
}
}
}
Подтвержденное решение
DataBinder привязывается к полям строки набора данных, а не к свойствам, определенным в частичных классах. Чтобы решить проблему, можно создать метод, который будет обрабатывать логику для колонки ESTIMATION_ALLOWED:
Можно модифицировать запрос, который заполняет набор данных, добавив в него необходимую логику прямо в SQL-запросе. Например, для SQL Server запрос может выглядеть так:
SELECT
...
CASE WHEN Do_Not_Estimate_Flag = 'N' THEN 'Yes' ELSE 'No' END AS ESTIMATE_ALLOWED,
...
FROM
...
Заключение
В данной статье был рассмотрен процесс работы с типобезопасными наборами данных и частичными классами на примере добавления дополнительной колонки ESTIMATION_ALLOWED. Представлены два способа решения возникшей проблемы: использование метода для обработки данных и модификация SQL-запроса. Оба подхода позволяют достичь желаемого результата, не изменяя исходную структуру базы данных.
Разработчик сталкивается с проблемой добавления дополнительной колонки в типобезопасный набор данных, используя частичные классы, и ищет решение для отображения новой колонки `ESTIMATION_ALLOWED` на основе данных из существующей колон
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS