Чтение онлайн

ЖАНРЫ

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю

Шрифт:

static void Main(string[] args) {

 …

 // Печать DataTable с помощью 'объекта чтения таблиц' .

 PrintTable(carsInventoryDS.Tables["Inventory"]);

}

Сохранение DataSet (и DataTable) в формате XML

В завершение рассмотрения текущего примера напомним, что как DataSet, так и DataTable предлагают поддержку методов WriteXml и ReadXml. Метод WriteXml позволяет сохранить содержимое объекта в локальном файле (или вообще в любом типе System.IO.Stream) в виде XML-документа. Метод ReadXml позволяет

прочитать информацию о состоянии DataSet (или DataTable) из имеющегося XML-документа. Кроме того, как DataSet, так и DataTable поддерживают WriteXmlSchema и ReadXmlSchema для сохранения и загрузки файлов *.xsd. Чтобы это проверить, добавьте в метод Main следующий набор операторов.

static void Main(string [] args) {

 …

 // Сохранение DataSet в виде XML.

 carsInventoryDS.WriteXml("carsDataSet.xml");

 carsInventoryDS.WriteXmlSchema("carsDataSet.xsd");

 // Очистка DataSet и вывод содержимого (должно быть пустым).

 carsInventoryDS.Сlear;

 PrintDataSet(carsInventoryDS);

 // Загрузка и печать DataSet.

 carsInventoryDS.ReadXml("carsDataSet.xml");

 PrintDataSet(carsInventoryDS);

}

Если открыть сохраненный файл carsDataSet.xml, вы увидите, что в нем представлены все столбцы таблицы, закодированные в виде XML-элементов.

‹?xml version="1.0" standalone="yes"?›

‹Car_x0020_Inventory›

 ‹Inventory›

‹CarID›0‹/CarID›

‹Make›BMW‹/Make›

‹Color›черный‹/Color

‹PetName›Hamlet‹/PetName›

 ‹/Inventory›

 ‹Inventory›

‹CarID›1‹/CarID›

‹Make›Saab‹/Make›

‹Color›красный‹/Color›

‹PetName›Sea Brеeze‹/PеtName›

 ‹/Inventory›

‹/Car_x0020_Inventory›

Наконец, напомним, что тип DataColumn поддерживает свойство ColumnMapping, которое можно использовать для управления представлением столбца в XML-формате. Значением, устанавливаемым для этого свойства по умолчанию, является MappingType.Element. Однако можно потребовать, чтобы столбец CarID представлялся XML-атрибутом, как это сделано ниже в обновленной версии объекта carIDColumn для DataColumn.

Static void Main(string[] args) {

 …

 DataColumn carIDColumn = new DataColumn("CarID", typeof(int));

 …

 carIDColumn.ColumnMapping = MappingType.Attribute;

}

Тогда вы обнаружите следующий XML-код.

‹?xml version="1.0" standalone="yes"?›

‹Car_x0020_Inventory›

 ‹Inventory CarID="0"›

‹Make›BMW‹/Make›

‹Color›черный‹/Color›

‹PetName›Hamlet‹/PetName›

 ‹/Inventory›

 ‹Inventory CarID="1"›

‹Make›Saab‹/Make›

‹Color›красный‹/Color›

‹PetName›Sea Breeze‹/PetName›

 ‹/Inventory›

‹/Car_x0020_Inventory›

Исходный

код.
Проект SimpleDataSet размещен в подкаталоге, соответствующем главе 22.

Привязка DataTable к интерфейсу пользователя

Теперь, когда мы обсудили процесс взаимодействия с DataSets в общем, давайте рассмотрим соответствующий пример приложения Windows Forms. Нашей целью является построение формы, отображающей содержимое DataTable в рамках элемента управления DataGridView. На рис. 22.13 показано окно исходного пользовательского интерфейса проекта.

Рис. 22.13. Привязка DataTable к DataGridView

Замечание. Для представления реляционных баз данных в .NET 2.0 элемент управления DataGridView считается наиболее "предпочтительным", однако остается доступным и устаревший элемент управления .NET 1.x DataGrid.

Создайте новое приложение Windows Forms с именем CarDataTableViewer. Добавьте в форму элемент управления DataGridView (назвав его carInventoryGridView) и Label с подходящим описанием. Затем добавьте в проект новый C#-класс (с именем Car), определив его так, как показано ниже.

public class Car {

 // Здесь public используется для простоты.

 public string carPetName, carMake, carColor;

 public Car(string petName, string make, string color) {

 carPetName = petName;

 carColor = color;

 carMake = make;

 }

}

Теперь в рамках конструктора формы, заданного по умолчанию, наполните член-переменную List‹› множеством новых объектов Car.

public partial class MainForm: System.Windows.Forms.Form {

 // Наш список машин.

 private List‹Car› arTheCars = new List‹Car›;

 public MainForm {

InitializeComponent;

CenterToScreen;

// Заполнение списка.

arTheCars.Add(new Car("Chucky", "BMW", "зеленый"));

arTheCars.Add(new Car("Tiny", "Yugo", "белый"));

arTheCars.Add(newCar(", "Jeep", "коричневый"));

arTheCars.Add(new Car("Pain Inducer'', "Caravan", "розовый"));

arTheCars.Add(new Car("Fred", "BMW", "светло-зелёный"));

arTheCars.Add(new Car ("Buddha", "BMW", "черный"));

arTheCars.Add(new Car("Mel", "Firebird", "красный"));

arTheCars.Add(new Car("Sarah", "Colt", "черный"));

 }

}

Как и в предыдущем примере SimpleDataSet, в приложении CarDataTableViewer будет создан объект DataTable, содержащий четыре объекта DataColumn для представления столбцов таблицы Inventory базы данных Cars. Точно так же DataTable будет содержать множество объектов DataRow для представления списка автомобилей. Но на этот раз мы заполним, строки с помощью обобщенного члена-переменной List‹›.

Поделиться с друзьями: