Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.01.2024

Просмотров: 962

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


// подход к выводу таблицы для ее просмотра и печати на принтере.

// Программа записывает таблицу в текстовый файл в формате HTML.

// Теперь у пользователя появляется возможность прочитать эту таблицу

//с помощью обозревателя Web-страниц Internet Explorer или другого браузера

using System;

using System.Windows.Forms;

// Другие директивы using удалены, поскольку они не используются в данной программе

namespace Табл_НТМ

{

public partial class Forml : Form

{

public Form1()

{

InitializeComponent();

this.Text = "Таблица в формате HTML";

string[] Imena = {"Андрей - раб", "Света-Х", "ЖЭК", "Справка по тел", "Александр Степанович", "Мама - дом", "Карапузова Таня", "Погода сегодня", "Театр Браво"};

string[] Tel = {"274-88-17", "+38(067)7030356", "22-345-72", "009", "223-67-67 доп 32-67",

"570-38-76", "201-72-23-прямой моб", "001", "216-40-22"};

string text = "" + "" +

"Таблица телефоновсар^оп>\г\п" ; for (int i = 0; i <= 8; i++)

text += string.Format("
{0} {l}", Imena[i], Tel[i]) + "\r\n";

text += "
";

// Запись таблицы в текстовый файл C:\Tabl_tel.htm.

// Создание экземпляра StreamWriter для записи в файл

var Писатель = new System.IO.StreamWriter(@"С:\Tabl_tel.htm", false,

System.Text.Encoding.GetEncoding(1251));

// - здесь заказ кодовой страницы Win1251 для русских букв

Писатель.Write(text); Писатель.Close();

try

{

// System.Diagnostics.Process.Start("Iexplore", @"C:\Tabl_tel.htm");

// Файл HTM можно открывать также с пом MS_WORD: System.Diagnostics.Process.Start("WinWord", @"C:\Tabl_tel.htm");

}

catch (Exception Ситуация)

{ // Отчет об ошибках.

MessageBox.Show(Ситуация.Message, "Ошибка",

MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

}

}

}

Как видно, HTML-файл формируется с помощью строковой переменной text. Между тегами <title> и title> указано название страницы. Это текст, который браузер покажет в заголовке окна.

Тег <table> указывает на начало таблицы, между тегами <caption> и caption> расположено название таблицы. Далее в пошаговом цикле for форми­руется каждая строка таблицы. Используется уже известный читателю String.Format, т. е. вместо фигурной скобки {0} подставляется элемент массива

Imena [ i ], а вместо {1}Tel [ i ].

Затем, создавая поток писатель, сохраняем на диск текстовый файл C:\Tabl_tel.htm. Далее в блоке try. . .catch открываем этот файл с помощью браузера Internet Explorer.

Результат работы программы приведен на рис. 7.4.



Рис. 7.4. Вывод таблицы в браузер

Очень технологично открыть созданный НТМ-файл не
Web-браузером, а тек­стовым редактором MS Word, т. е. в программном коде написать: System.Diagnostics.Process.Start("WinWord", @"C:\Tabl_tel.htm")

В этом случае пользователь вашей программы будет иметь возможность редак тировать полученную таблицу. Убедиться в работоспособности программы можно, открыв решение Табл_НТМ.sln в папке Табл_НТМ.

Пример 47. Формирование таблицы с помощью элемента управления DataGridView

Создадим приложение, которое заполняет два строковых массива и выводит эти массивы на экран в виде таблицы, используя элемент управлении DataGridView (просмотр сетки данных). Элемент управления DataGridView предназначен для просмотра таблиц с возможностью их редактирования.

Запускаем Visual Studio 2010, далее — новый проект и выбираем шаблон Windows Forms Application C#, при этом получаем стандартную форму. Перенесем в форму элемент управления DataGridView (Сетка данных) из панели Toolbox В данной программе два уже знакомых читателю массива Imena[] и теl[] выво­дятся на сетку данных DataGridView. Для максимального упрощения программе формируем таблицу сразу после вызова процедуры InitializeComponent. Текст программы приведен в листинге 7.5.

Листинг 7.5. Формирование таблицы с помощью элемента управления DataGridView

// Программа заполняет два строковых массива и выводит эти массивы в виде таблицы, используя элемент управления

//DataGridView (Сетка данных). Элемент управления DataGridView предназначен для просмотра таблиц c возможностью их //редактирования

using System;

using System. Drawing;

using System.Windows.Forms;

// Другие директивы using удалены, поскольку они не используются в данной программе

namespace TaблGrid

{

public partial class Form1: Form

{

public Form1()

{

InitializeComponent();

base.Text = "Формирование таблицы";

String[] Imena = {"Андрей - раб", "Света-Х", "ЖЭК", "Справка по тел", "Александр Степанович",

"Мама - дом", "Карапузова Таня", "Погода сегодня", "Театр Браво"};

String[] Tel = {"274-88-17", "+38(067)7030356", "22-345-72", "009", "223-67-67 доп 32-67", "570-38-76", "201-72-23-прямой моб", "001", "216-40-22"};

// Создание объекта "таблица данных"

DataTable Таблица = new DataTable();

// Заполнение "шапки" таблицы

Таблица.Columns.Add("Имена");

Таблица.Columns.Add("Номера телефонов");

// Заполнение клеток (ячеек) таблицы данных

for (int i = 0; i <= 8; i++)

Таблица. Rows. Add (new String[] { Imena [i], Tel[i] });



// Для сетки данных указываем источник данных

dataGridView1.DataSource = Таблица;

}

}

}

Как видно, в программе используется объект таблица данных DataTable. С его помощью сначала заполняем "шапку" таблицы данных, используя метод Columns.Add, а затем непосредственно ячейки таблицы, используя метод Rows.Add.

Чтобы передать построенную таблицу в элемент управления DataGridView указываем в качестве источника данных DataSource объект таблица класca DataTable.



Рис. 7.5. Форматирование таблицы

На рис. 7.5 приведен результат работы программы. Заметьте, щелкая мышью нa заголовках колонок, получаем сортировку данных в алфавитном порядке полей таблицы.

Убедиться в работоспособности программы можно, открыв решение Табл.Grid.sln в папке ТаблGrid.

Пример 48. Табличный ввод данных. DataGridView. DataTable. DataSet. Инструмент для создания файла XML

Существует множество задач, предполагающих ввод данных в виде таблиц. Конечно, можно эту таблицу программировать как совокупность текстовых полей TextBox, но часто заранее неизвестно, сколько рядов данных будет вводить пользователь, необходимо предусмотреть скроллинг этой таблицы и т. д. То есть проблем в организации ввода табличных данных достаточно много.

Мы предлагаем для цели ввода табличных данных использовать элемент управления DataGridView (Сетка данных). Прежде всего, этот элемент управления предназначен для отображения данных, которые удобно представить в виде таблицы, чаще всего источником этих данных является база данных. Однако кроме отображения DataGridView позволяет также редактировать табличные данные. Элмент управления DataGridView поддерживает выделение, изменение, удаление, разбиение на страницы и сортировку.

Программа, обсуждаемая в данном разделе, предлагает пользователю заполнить таблицу телефонов его знакомых, сотрудников, родственников, любимых и т.д. После щелчка на кнопке Запись данная таблица записывается на диск в формате XML. Для упрощения текста программы предусмотрена запись в один и тот же файл C:\tabl.xml. При последующих запусках данной программы таблица будет считываться из файла, и пользователь может продолжать редактирование таблицы. Поэтому эту программу можно громко назвать табличным редактором. Щелкая мышью на заголовках колонок, можно расположить записи в колонках в алфавитном порядке для удобного поиска необходимого телефона.


Для написания программы требуется из панели управления Toolbox перенести мышью элементы управления: сетка данных DataGridView и кнопка Button. Текст программы приведен в листинге 7.6.

Листинг 7.6. Заполнение телефонной книги

// Программа предлагает пользователю заполнить таблицу телефонов его знакомых,

// сотрудников, родственников, любимых ит. д. После щелчка на кнопке Запись

// данная таблица записывается на диск в файл в формате XML. Для упрощения

// текста программы предусмотрена запись в один и тот же файл C:\tabl.xml.

// При последующих запусках данной программы таблица будет считываться

// из этого файла, и пользователь может продолжать редактирование таблицы

using System;

using System.Data;

using System.Windows. Forms ;

// Другие директивы using удалены, поскольку они не используются вданной программе

namespace ТаблВвод

{

public partial class Form1: Form

{

DataTable Таблица = new DataTable(); // Создание объекта "таблица данных"

DataSet НаборДанных = new DataSet(); // Создание объекта "набор данных"

public Form1()

{

InitializeComponent();

base.Text = "Почти табличный редактор";

button1.Text = "Запись";

if (System.IO.File.Exists(@"C:\tabl.xml") == false)

{ // Если XML-файла НЕТ:

dataGridView1.DataSource = Таблица;

// Заполнение "шапки" таблицы

Таблица.Columns.Add("Имена");

Таблица.Columns.Add("Номера телефонов");

// Добавить объект Таблица в DataSet

НаборДанных.Tables.Add(Таблица);

}

else // Если XML-файл ЕСТЬ:

{

НаборДанных.ReadXml(@"С:\tabl.xml");

// Содержимое DataSet в виде строки XML для отладки:

string СтрокаХМL = НаборДанных.GetXml();

dataGridView1.DataMember = "Название таблицы";

dataGridView1.DataSource = НаборДанных;

}

}

private void button1_Click(object sender, EventArgs e)

{ // Сохранить файл tabl.xml:

Таблица.TableName = "Название таблицы";

НаборДанных.WriteXml(@"C:\tabl.xml");

}

}

}

Как видно из текста программы, потребовалось всего лишь несколько строк программного кода для создания такой многофункциональной программы. Это cтало возможным благодаря использованию мощной современной технологии
ADO.NET. В начале класса объявлены два объекта этой технологии: набор данных Dataset и таблица данных DataTable. Объект класса DataSet является основным компонентом архитектуры ADO.NET. DataSet представляет кэш данных, располо­женный в оперативной памяти. DataSet состоит из коллекции объектов класса DataTable. То есть в один объект класса DataSet может входить несколько таблиц, a информацию о них мы можем записывать в файл на диск одним оператором WriteXml, соответственно читать — ReadXML. Таким образом, в этой программе мы имеем дело преимущественно с тремя объектами: DataSet— кэш данных. )DataTable— представляет одну таблицу с данными и DataGridview— элемент у правления для отображения данных.

Сразу после инициализации компонентов формы мы обработали две ситуации. Если файла, в который мы сохраняем информацию о таблице, не существует Еxists("C:\\tabi.xml") == false, то назначаем в качестве источника данных )DataSource для DataGrid объект класса DataTable и заполняем "шапку" таблицы, т. е. указываем названия колонок: "Имена" и "Номера телефонов", а затем добавляем объект DataTable в объект с DataSet. Теперь пользователь видит пустую таблицу с двумя колонками и может ее заполнять. Если файл существует( ветвь else ), то данные в объект DataSet отправляем из XML-файла (ReadXML). Здесь уже в качест­ве источника данных для сетки данных DataGrid указываем объект DataSet.

При щелчке мышью на кнопке Запись (рис. 7.6)— событие button1 .clickпроисходит запись XML-файла на диск (WriteXml).



Здесь используются так называемые ХML- файлы. Формат этих файлов позволяет легко и надежно передавать данные посредством Интернета даже на компьютеры другой платформы ( например, Macintosh). В нашей задаче мы не ставили перед собой цель работать в Интернете, а всего лишь воспользовались данной технологией. Файл формата XML можно просмотреть Блокнотом или с помощью MS Word, поскольку это текстовый файл. Однако следует учесть, что этот файл записан в кодировке UTF-8, поэтому другими текстовыми редакторами, например edit.com или Rpad32.exe (русский Блокнот), его прочитать затруднительно. XML-документ открывается Web-браузером, XML-editor (входит в состав Visual Studio 2010), MS Office