Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Название:ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2007
- Город:Москва • Санкт-Петербург • Киев
- ISBN:ISBN 5-8459-1124-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание краткое содержание
В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML. Книга содержит множество примеров программного кода, призванного помочь читателю в освоении предлагаемого материала. Программный код примеров можно загрузить с Web-сайта издательства.
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
static void PrintDataSet(DataSet ds) {
Console.WriteLine("Таблицы в DataSet '{0}'.\n", ds.DataSetName);
foreach (DataTable dt in ds.Tables) {
Console.WriteLine("Таблица {0}.\n", dt.TableName);
// Вывод имен столбцов.
for (int curCol = 0; curCol ‹ dt.Coumns.Count; curCol++) {
Console.Write(dt.Columns[curCol].ColumnName.Trim() + ''\t");
}
Console.WriteLine("\n--------------------------------");
// Вывод DataTable.
for (int curRow = 0; curRow ‹ dt.Rows.Count; curRow++) {
for (int curCol = 0; curCol ‹ dt.Columns.Count; curCol++) {
Console.Write(dt.Rows[curRow][curCol.ToString() + "\t");
}
Console.WriteLine();
}
}
}
Вывод программы показан на рис. 22.12.

Рис. 22.12. Содержимое объекта DataSet примера
Работа с DataTableReader в .NET 2.0
Тип DataTable предлагает еще целый ряд методов, кроме тех, что уже были нами рассмотрены. Подобно DataSet, тип DataTable поддерживает, например, методы AcceptChanges(), GetChanges(), Сору() и ReadXml()/WriteXml(). В .NET 2.0 тип DataTable поддерживают также метод CreateDataReader(). Этот метод позволяет получить данные DataTable, используя схему, соответствующую схеме навигации объекта чтения данных (только вперед и только для чтения). Для примера создайте новую вспомогательную функцию PrintTable(), реализованную следующим образом.
private static void PrintTable(DataTable dt) {
Console.WriteLine("\n***** Строки в DataTable *****");
// Получение нового для .NET 2.0 типа DataTableReader.
DataTableReader dtReader = dt.CreateDataReader();
// DataTableReader работает подобно DataReader.
while (dtReader.Read()) {
for (int i = 0; i ‹ dtReader.FleldCount; i++) {
Console.Write("{0} = {1} ", dtReader.GetName(i), dtReader.GetValue(i).ToString().Trim());
}
Console.WriteLine();
}
dtReader.Close();
}
Обратите внимание на то, что DataTableReader работает аналогично объекту чтения данных поставщика данных. Использование DataTableReader может оказаться идеальным вариантом, когда нужно быстро прочитать данные DataTable без просмотра внутренних коллекций строк и столбцов. Для вызова метода нужно просто указать соответствующую таблицу.
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", "красный"));
Интервал:
Закладка: