Технология Microsoft ADO.NET

Создание столбцов, основанных на выражении


При создании базы данных не следует помещать в нее значения, которые могут быть получены из уже имеющихся данных. В первой лекции мы создали базу данных BDTur_firm.mdb, в которой есть таблица "Туры". В этой таблице имеется поле "цена", где указывается стоимость туров. На практике может понадобиться значение цены, выраженное в различных валютах, значение с учетом налогов, значение со скидкой и т.п. Для каждого конкретного случая можно получить дополнительное поле, не вводя его в саму базу данных. Технология ADO .NET позволяет создавать объекты DataColumn, основанные на выражении. Создайте новое Windows-приложение и назовите его CustomExpression. Перетаскиваем на форму элемент управления DataGrid, свойству Dock устанавливаем значение Fill. Переходим в код формы, подключаем пространство имен:

using System.Data.OleDb;

В классе формы определяем строки CommandText и ConnectionString:

string commandText = "SELECT Информация, [Код тура], Название, Цена FROM Туры"; string connectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0"";Data Source=""D:\Uchebnik\Code\Glava1\BDTur_firm.mdb"";User ID=Admin; Jet OLEDB:Encrypt Database=False";

В конструкторе формы программно создаем все объекты для вывода таблицы "Туры" в элемент управления DataGrid:

public Form1() { InitializeComponent(); OleDbConnection conn = new OleDbConnection (connectionString); OleDbCommand myCommand = new OleDbCommand(); myCommand.Connection = conn; myCommand.CommandText = commandText; OleDbDataAdapter dataAdapter = new OleDbDataAdapter(); dataAdapter.SelectCommand = myCommand; DataSet dsTours = new DataSet(); DataTable dtTours = dsTours.Tables.Add("Туры"); DataColumn dсIDtour = dtTours.Columns.Add("Код тура", typeof(Int32)); dсIDtour.Unique = true; DataColumn dcName = dtTours.Columns.Add("Название"); DataColumn dcPrice = dtTours.Columns.Add("Цена", typeof(Decimal)); DataColumn dcInformation = dtTours.Columns.Add("Информация"); conn.Open(); dataAdapter.Fill(dsTours.Tables["Туры"]); conn.Close(); dataGrid1.DataSource = dsTours.Tables["Туры"].DefaultView; }


Запускаем приложение (рис. 8.11):


увеличить изображение
Рис. 8.11.  Вывод содержимого таблицы "Туры"

Теперь добавим два объекта DataColumn, в которых будет вычисляться налог и скидка, после добавления объекта dcPrice:

... DataColumn dcPrice = dtTours.Columns.Add("Цена", typeof(Decimal)); DataColumn dcPriceNDS = dtTours.Columns.Add("Цена c НДС", typeof(Decimal)); dcPriceNDS.Expression = "Цена*0.15+Цена"; DataColumn dcPricewithDiscount = dtTours.Columns.Add("Цена cо скидкой", typeof(Decimal)); dcPricewithDiscount.Expression = "Цена-Цена*0.10"; ...

Свойство Expression созданного объекта DataColumn задает выражения для всех значений заданного поля (рис. 8.12):


увеличить изображение
Рис. 8.12.  Значения полей "Цена с НДС" и "Цена со скидкой" получены в результате вычислений

Свойство Expression поддерживает также агрегатные функции, объединение строк, ссылки на родительские и дочерние таблицы.

В программном обеспечении к курсу вы найдете приложение Custom Expression (Code\Glava4\CustomExpression).


Содержание раздела