| Украина, Киев |
Объекты DataTable, DataRow и DataColumn
Создание столбцов, основанных на выражении
При создании базы данных не следует помещать в нее значения, которые могут быть получены из уже имеющихся данных. В "Элементы работы с базами данных" мы создали базу данных 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):
Теперь добавим два объекта 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).

