Опубликован: 05.08.2007 | Уровень: специалист | Доступ: платный
Лекция 8:

Объекты 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):

 Вывод содержимого таблицы "Туры"

увеличить изображение
Рис. 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).

Александра Тимофеева
Александра Тимофеева
Украина, Киев
Bakke Aleksander
Bakke Aleksander
Россия, Mуниципальный округ N 4