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

Свойства и методы объекта Command

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >

Вывод данных в элемент ListView приводит к достаточно удовлетворительному результату, однако более привычным для нас является вывод в элемент DataGrid. Раньше, при использовании объекта DataSet, мы указывали источник данных для элемента DataGrid так:

dataGrid1.DataSource = dataset.Tables["Название_таблицы"].DefaultView;

Или так:

dataGrid1.DataSource = dataset;

Объект DataReader не поддерживает аналогичного вывода - мы не можем связать объекты таким простым образом:

dataGrid1.DataSource = datareader;

Одним из способов вывода является применение дополнительных объектов DataTable. Объект DataTable предназначен для хранения таблицы, полученной из базы данных (в "Объекты DataTable, DataRow и DataColumn" мы рассмотрим подробно этот объект). Создайте новое приложение и назовите его "DataReaderToDataGrid". Перетаскиваем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Подключаем пространство имен для работы с базой:

using System.Data.SqlClient;

В классе формы создаем следующие объекты:

SqlConnection conn = null;
//Создаем экземпляр FullDataTable, в который будут помещаться данные
DataTable FullDataTable = new DataTable();
//Создаем экземпляр ShemaDataTable для получения структуры таблицы из базы данных 
DataTable ShemaDataTable = new DataTable();
SqlDataReader dataReader;
SqlCommand myCommand;
//Создаем объект objectRow для получения информации о числе столбцов
object[] objectRow;

Основной код помещаем в конструктор формы:

public Form1()
{
	InitializeComponent();
	try
	{
		conn = new SqlConnection();
		conn.ConnectionString = "integrated security=SSPI;data
		 source=\".\"; persist security info=False;
		 initial catalog=BDTur_firm2";
		conn.Open();
		myCommand = conn.CreateCommand();
		myCommand.CommandText = "SELECT * FROM Туристы";
		dataReader = myCommand.ExecuteReader();
		//Вызываем метод GetSchemaTable, который получает схему таблицы из базы
		//и передает ее объекту ShemaDataTable
		ShemaDataTable = dataReader.GetSchemaTable();
		//Свойство FieldCount возвращает число столбцов для текущей записи. 
		//Передаем это значение объекту objectRow
		objectRow = new object[dataReader.FieldCount];
		//Определяем структуру объекта FullDataTable
		for(int i =0; i <dataReader.FieldCount; i++)
		{
			FullDataTable.Columns.Add(ShemaDataTable.Rows[i] 
			 ["ColumnName"].ToString(),
			 ((System.Type)ShemaDataTable.Rows[i] ["DataType"]));
		}
		//Добавляем записи в объект FullDataTable
		while(dataReader.Read())
		{
			dataReader.GetValues(objectRow);
			myDataRow = FullDataTable.Rows.Add(objectRow);
		}
		//Определяем источник данных для элемента dataGrid1
		dataGrid1.DataSource = FullDataTable;
	}
	catch (Exception ex)
	{
		MessageBox.Show(ex.ToString());
	}
	finally
	{
		dataReader.Close();
		conn.Close();
	}
}

Возможно, этот код показался вам сложным. Лучше будет к нему вернуться еще раз после изучения "Объект DataView. Вывод связанных таблиц" . Запускаем приложение (рис. 6.28):

 Приложение DataReaderToDataGrid

Рис. 6.28. Приложение DataReaderToDataGrid

В программном обеспечении к курсу вы найдете приложение Data ReaderToDataGrid (Code\Glava3\ DataReaderToDataGrid).

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >
Александра Тимофеева
Александра Тимофеева
Украина, Киев
Bakke Aleksander
Bakke Aleksander
Россия, Mуниципальный округ N 4