Краткие теоретические сведения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Краткие теоретические сведения



 

Формат XML – это способ хранения данных, представленных
в простом текстовом формате, что означает, что эти данные могут быть прочитаны практически любым компьютером. Данное обстоятельство делает этот формат весьма подходящим для использования при передаче данных через Интернет и допускает даже непосредственное прочтение человеком.

XML является языком разметки, с помощью которого можно описать произвольные данные. На основеэтогоязыкаможно организовать хранение информации и ее обмен, не зависящий ни от конкретных приложений, ни от платформы, на которой они исполняются.  

XML - документы. Законченный набор данных известен в языке XML под названием XML -документа. XML -документ может представлять собой физический файл на вашем компьютере, а может быть всего лишь строкой в памяти, однако он должен быть законченным
и подчиняться определенным правилам. XML -документ состоит из нескольких различных частей, наиболее важными из которых являются XML- элементы, где содержатся те данные, из которых собственно и состоит документ.

Microsoft. NET Framework использует объектную модель данных XML Document ObjectModel(DOM), чтобы обеспечить доступ
к данным в XML -документах, и дополнительные классы для чтения, записи и навигации в пределах XML -документа. Эти классы поддерживаются пространством имен System.XML. Пример представления описания каталога книг в модели DOM приведен на рис. 8.1.

 

Описание документа на языке XML включает в себя операторы, написанные с соблюдением требований его синтаксиса. При создании XML -документа вместо использования ограниченного набора определенных элементов имеется возможность создавать собственные элементы и присваивать им любые имена по выбору пользователя. Именно поэтому язык XML является расширяемым (extensible). Следовательно, этот язык можно использовать для описания практически любого документа: от музыкальной партитуры до базы данных.

     
 

 

 


Рис. 8.1. Иерархическая структура документа

 

Например, каталог книг можно описать так, как показано в листинге 8.1 (номера строк не являются частью документа XML). Для создания XML -документа в среде Visual Studio. NET следует воспользоваться командой File \ New File и в выпавшем списке шаблонов выбрать имя шаблона XML File.

 

Листинг 8.1. Текст XML -документа

1. <?xml version="1.0" encoding="utf-8"?>

2. <!-- Название файла book.xml-->

3. <KATALOG>

4. <BOOK>

5. <TITLE>С#2005 для профессионалов </TITLE>

6. <AUTHOR>Кристиан Нейгел</AUTHOR>

7. <PAGES>1560</PAGES>

8. <PRICE>800</PRICE>

9. <PDATA>2006 </PDATA>

10. </BOOK>

11. <BOOK>

12. <TITLE>С# в задачах и примерах</TITLE>

13. <AUTHOR>Никита Культин</AUTHOR>

14. <PAGES>240</PAGES>

15. <PRICE>350</PRICE>

16. <PDATA>2007 </PDATA>

17. </BOOK>

18. </KATALOG>

В строке 1 данного листинга записано объявление XML, идентифицирующее текст как документ XML. Несмотря на необязательность объявления XML, документ должен включать его в себя для идентификации используемой версии XML, поскольку документ без объявления XML может в дальнейшем рассматриваться как соответствующий последней версии XML, в результате чего могут появиться ошибки. Информационный параметр version указывает версию XML, использованную в документе, параметр encoding – кодировку документа (utf-8).

В строке2 записан комментарий, начинающийся с символов <!-- и заканчивающийся символами -->. Комментарии можно размещать по всему XML -документу.

В XML -документе данные маркируются с помощью тэгов (элементов), представляющих собой имена, заключенные в угловые скобки (< >). Имена тэгов в XML -документе (такие как KATALOG, BOOK, TITLE, AUTHOR, PAGES, PRICE, PDATA в листинге 8.1) не являются определениями языка XMLи назначаются при создании документа. Для тэгов можно выбирать любые корректно заданные имена, например INVENTORY вместо KATALOG либо ITEM
вместо BOOK. В строке 3 записан корневой тэг – KATALOG, открывающий разметку всего документа. При завершении написания корневого тэга среда автоматически вставляет конечный тэг (строка 18 листинга 8.1), отмечая его символами </.

Примечание. Попытка создания более одного корневого элемента в
XML -документе является ошибкой.

Внутри корневого элемента может находиться произвольное количество вложенных элементов. В листинге 8.1 XML -документ имеет иерархическую структуру в виде дерева с элементами, вложенными
в другие элементы, и с одним элементом верхнего уровня элемент
Документ
, или Корневой элемент (в нашем примере – KATALOG), который содержит все другие элементы. Корневой элемент KATALOG включает в себя элементы-потомки BOOK. В свою очередь элемент BOOK состоит из элементов-потомков TITLE, AUTHOR, PAGES, PRICE, PDATA.

Корректно сформированные XML-документы. Документ называется корректно сформированным (well-formed), если он соответствует следующему минимальному набору правил для XML -доку-ментов:

XML -документ должен иметь только один корневой элемент – элемент Документ. Все другие элементы должны быть вложены
в корневой элемент;

– элементы должны быть вложены упорядоченным образом.
Если элемент начинается внутри другого элемента, то он должен и заканчиваться внутри этого элемента;

– каждый элемент должен иметь начальный и конечный тэги.
В отличие от языка HTML, в языке XML не разрешается опускать
конечный тэг даже в том случае, когда браузер в состоянии определить, где заканчивается элемент;

– название элемента в начальном тэге должно точно соответствовать (с учетом регистра) названию в соответствующем конечном тэге;

– название элемента должно начинаться с буквы или с символа подчеркивания (_), после чего могут идти буквы, цифры, а также символы: точка (.), тире (-) или подчеркивание.

Это базовые правила корректного формирования XML -документа. Для других понятий языка XML (атрибутов, примитивов, связей) действуют свои правила, которые необходимо соблюдать. Можно сказать, что если документ создан правильно и при его отображении и использовании не возникает никаких ошибок, то это
и есть корректно сформированный документ. Если вы ошибетесь
в каком-либо тэге HTML -страницы, то браузер просто проигнорирует соответствующий тэг, а ошибка в тэге XML -страницы сделает невозможным ее отображение. При наличии одной из ошибок встроенный в Internet Explorer анализатор (его иногда называют XML -про-цессором, или парсером) определяет ее позицию

Классы библиотеки FCLдля чтения XML-файлов. Работу
с XML -документами поддерживают следующие классы библиотеки FCL: XmlTextReader, XmlDocument, XPathNavigator.

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

Класс XmlDocument представляет собой реализацию модели DOM. Этот класс удерживает данные в памяти после вызова метода Load () для извлечения их из файла или потока, обеспечивает древовидное представление документа в памяти с возможностями навигации и редактирования, а также позволяет модифицировать данные
и сохранять их обратно в файл.

Класс XPathNavigator так же, как и класс XmlDocument, удерживает в памяти XML - документ целиком. Он предоставляет расширенные средства поиска данных, однако не обеспечивает возможности внесения изменений и их сохранения.

Класс XmlTextReader. Рассмотрим простой пример. Разместим на форме элементы richTextBox и button (рис. 8.2). При щелчке на кнопку в элемент richTextBox будет загружаться файл, содержимое которого было представлено в листинге 8.1. Код функции, вызываемой при щелчке на кнопку, показан в листинге 8.2.

 

Рис. 8.2. Результаты считывания из Xml -документа

Листинг 8.2. Код обработчика щелчка по кнопке

//Очистка элемента richTextBox 1

richTextBox 1. Clear ();

// Вызов статического метода Create (), возвращающего объект класса

// Файл book.xml находится в том же месте, что и исполняемый файл

// программы

       XmlReader rdr = XmlReader.Create("book.xml");

// Метод Read () перемещает на следующий узел Xml -документа

       while (rdr.Read())

       {

           if (rdr.NodeType == XmlNodeType.Text)

               richTextBox1.AppendText(rdr.Value + "\r\n");

       }

Класс XmlReader также может читать данные со строгим контролем типов. Существует несколько методов ReadElementContentAs, выполняющих чтение, среди которых ReadElementContentAsDecimal(), ReadElementContentAs Int (), ReadElementContentAs Boolean () и др.

В листинге 8.3 показано, как считывать значения в десятичном формате и выполнять над ними математические операции. В рассматриваемом случае цена элемента увеличивается на 25 %. Результаты выполнения этого кода показаны на рис. 8.3.

 

 

Рис. 8.3. Результаты считывания из Xml - документа

только названия и цены книг

 

Листинг 8.3. Чтение данных со строгим контролем типов

 

// Очистка элемента richTextBox 1

richTextBox 1. Clear ();

// Создание потока для чтения из файла book. xml

       XmlReader rdr = XmlReader.Create("book.xml");

       while (rdr.Read())

       {

           if (rdr.NodeType == XmlNodeType.Element)

             {

// Проверка имени элемента

               if (rdr. Name == " PRICE ")

                 {

// Метод ReadElementContentAsDecimal () выполняет

// преобразование содержимого элемента к типу decimal

              decimal price = rdr.ReadElementContentAsDecimal();

                   richTextBox1.AppendText(" Текущая цена = " + price +

               "руб\ r \ n ");

// Изменение цены на 25 %

       price += price * (decimal).25;

         richTextBox1.AppendText(" Новая цена = " + price +

      " руб \r\n\r\n");

                 }

               else if (rdr.Name == "TITLE")

richTextBox1.AppendText(rdr.ReadElementContentAsString() + "\r\n");

             }

}

Класс XmlDocument. Этот класс и производный от него класс XmlDataDocument используются в библиотеке .NET для представления объектной модели документа DOM.  

В отличие от класса XmlReader, класс XmlDocument предла-гает возможности не только чтения, но и записи, а также произвольного доступа к дереву DOM.

Рассмотрим пример, в котором создается объект класса XmlDocument, загружается документ с диска и отображается окно списка с названиями книг (рис. 8.4).

 

 

Рис. 8.4. Отображение названий книг в списке.

 

В классе формы приложения создадим объект класса
XmlDocument:

XmlDocument _doc = new XmlDocument();

 

Код обработчика щелчка по кнопке приведен в листинге 8.4.

 

Листинг 8.4. Загрузка названий книг в список

 

_doc.Load("book.xml");

       // Получить только те узлы, которые нужны

       XmlNodeList nodeLst = _doc.GetElementsByTagName("TITLE");

       // Просмотр в цикле класса XmlNodeList

       foreach (XmlNode node in nodeLst)

           listBox1.Items.Add(node.InnerText);

 

Введем в приложение возможность вывода свдений о книге, наз-вание которой выделено в списке, для чего добавим обработчик события listBox 1_ SelectedIndexChanged так, как показано в листинге 8.5.

Листинг 8.5. Обработчик щелчка по элементу списка

 

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

   {

// Создание строки поиска

string srch = "KATALOG/BOOK[TITLE='" + list

Box 1. SelectedItem. ToString () + "']";

// Поиск дополнительных данных

       XmlNode foundNode = _doc.SelectSingleNode(srch);

       if (foundNode!= null)

           MessageBox.Show(foundNode.OuterXml);

       else

           MessageBox.Show("Not found");

   }

Результаты работы приложения показаны на рис. 8.5.

Рис. 8.5. Вывод сведений о выделенном элементе списка

С помощью класса XmlDocument такжеможно вставлять узлы
в существующий документ, для чего используется метод Create - Element ().

Например, для создания нового элемента BOOK необходимо записать следующий код:

XmlElement newBook = _doc.CreateElement("BOOK");

 

Создать элементы, вложенные в элемент BOOK, можно с помощью следующего кода:

 

// Создание нового элемента AUTOR

XmlElement newAuthor = _doc.CreateElement("AUTOR");

newAuthor.InnerText = "C. Байдачный ";

newBook.AppendChild(newAuthor);

 

Полный код обработчика щелчка по кнопке приведен в лис-тинге 8.6, результаты его работы показаны на рис. 8.6.

 

Листинг 8.6. Обработчик щелчка по кнопке

 

private void button1_Click(object sender, EventArgs e)

   {

_doc.Load("book.xml");

       XmlElement newBook = _doc.CreateElement("BOOK");

       // Создание нового элемента TITLE

       XmlElement newTitle = _doc.CreateElement("TITLE");

       newTitle.InnerText = ".NET Framework 2.0";

       newBook.AppendChild(newTitle);

      // Создание нового элемента AUTOR

       XmlElement newAuthor = _doc.CreateElement("AUTOR");

       newAuthor.InnerText = "C. Байдачный ";

       newBook.AppendChild(newAuthor);

       // Создание нового элемента PAGES

       XmlElement newpages = _doc.CreateElement("PAGES");

       newpages.InnerText = "498";

       newBook.AppendChild(newpages);

       // Создание нового элемента PRICE

       XmlElement newprice = _doc.CreateElement("PRICE");

       newprice.InnerText = "590";

       newBook.AppendChild(newprice);

       // Создание нового элемента PDATA

       XmlElement newpdata = _doc.CreateElement("PDATA");

       newpdata.InnerText = "2006";

       newBook.AppendChild(newpdata);

          // Добавление в текущий документ

       _doc.DocumentElement.AppendChild(newBook);

       // Запись документа на диск

       XmlTextWriter tr = new XmlTextWriter("bookEdit.xml", null);

       tr.Formatting = Formatting.Indented;

       _doc.WriteContentTo(tr);

       tr.Close();

       // Загрузка listBox1 со всеми названиями книг, включая новое

       XmlNodeList nodeLst = _doc.GetElementsByTagName("TITLE");

       // Просмотр в цикле класса XmlNodeList

       foreach (XmlNode node in nodeLst)

       listBox1.Items.Add(node.InnerText);

}

При использовании классов XmlDocument и XmlReader необходимо учитывать следующие особенности. Если требуется возможность произвольного доступа к документу, то следует применять класс XmlDocument, а если нужна потоковая модель, то классы,
основанные на классе XmlReader. Класс XmlDocument отличается большой гибкостью, но его требования к памяти являются более высокими, чем у класса XmlReader, а производительность при считывании документа – более низкой.

 

Рис. 8.6. Окно работающего приложения

с добавленным узлом

 

Класс XPathNavigator. Класс XPathNavigator является частью пространства имен System. Xml. XPath, созданного для увеличения быстродействия. Это пространство обеспечивает только чтение документов, следовательно средства редактирования в нем отсутствуют, а классы построены так, чтобы обеспечить быстрое выполнение на заданном XML -документе циклов и операций выбора в стиле курсора.

Наилучшим способом использования классов из пространства имен System. Xml. XPath является просмотр документа book. xml
в цикле.

Разместим на форме элементы listBox и button. Код обра-ботчика щелчка по кнопке приведен в листинге 8.7, результаты выполнения этого кода – на рис. 8.7.

 

Листинг 8.7. Обработчик щелчка по кнопке

 

private void button1_Click(object sender, EventArgs e)

   {

// Создание объекта с именем doc класса XPathDocument и передача

// в его конструктор имени XML - файла book.xml

       XPathDocument doc = new XPathDocument("book.xml");

// Создание объекта с именем nav класса XPathNavigator на базе объекта

// XPathDocument.   Объект nav может использоваться только для чтения

// данных

       XPathNavigator nav = ((IXPathNavigable)doc). CreateNavigator();

// Создание объекта XPathNodeIterator для узлов каталога

// и его дочерних узлов

       XPathNodeIterator iter = nav.Select("/KATALOG/BOOK");

       while (iter.MoveNext())

       {

// Метод SelectDescendants() класса XPathNavigator выбирает все

// узлы-потомки текущего узла, соответствующие условиям выбора

XPathNodeIterator newIter =

iter.Current.SelectDescendants(XPathNodeType.Element,  false);

// Заполнение списка именами и значениями элементов

            while (newIter.MoveNext())

           listBox1.Items.Add(newIter.Current.Name + ": " +

           newIter. Current. Value);

       }

 

// Добавление в список элемента, содержащего значение общей стоимости

// книг

       listBox1.Items.Add("=========================");

       listBox1.Items.Add("Общая стоимость = " +

       nav.Evaluate("sum(/KATALOG/BOOK/PRICE)")+" руб ");

   }

Примечание. Если объект класса XPath Navigator создатьнабазе класса XmlDocument, то он может быть использован и для редактирования документа.

Разработка приложения КНИГИ. Рассмотрим пример разработки приложения, отображающего информацию о каталоге книг. Хранилищем данных о книгах является файл с именем book.xml,
содержимое которого было представлено в листинге 8.1. Организуем фильтрацию по всем элементам данных: названию, автору, коли-честву страниц, цене и дате издания книги.

 

Рис. 8.7. Результаты выполнения кода обработчика

щелчка по кнопке Суммарная стоимость книг

Для проектирования интерфейса приложения на форме разместим элементы управления, как показано на рис. 8.8.

 

Рис. 8.8. Размещение элементов управления на форме

при проектировании приложения Книги

Поясним назначение элементов управления, не использовавшихся в предыдущих лабораторных работах.

Элемент ВindingSource применяется во многих случаях. В частности, он упрощает привязку элементов управления на форме
к данным, предоставляя средства управления денежными единицами, передавая уведомления об изменениях и выполняя другие функции связи между элементами управления Windows Forms и источниками данных. Это достигается путем присоединения компонента BindingSource к источнику данных с помощью свойства DataSourse. В сложных сценариях привязки можно дополнительно указать в свойстве DataMember определенный столбец или список в источнике данных. Затем выполняется привязка элементов управления к компоненту BindingSource. Все последующие взаимодействия с данными осуществляются с помощью вызовов этого компонента.

Элемент управления BindingNavigator представляет стандартный способ навигации и управления данными на форме. В большинстве случаев этот элемент управления соединяется попарно с элементом управления BindingSource, чтобы обеспечивать перемещение между записями данных на форме и взаимодействовать с ними.
В этих случаях свойство BindingSource устанавливается на соответствующий компонент System. Windows. Forms BindingSource, который действует в качестве источника данных.

Элемент управления DataGriedView отображает данные в настраиваемой сетке.

Код приложения Книги представлен в листинге 8.8.

Листинг 8.8. Код приложения Книги

using System. IO;

using System.Xml;

using System.Xml.Schema;

Namespace testReadDataSet

{

public partial class Form1: Form

{

// Переменная для имени файла

   string file_name = "book.xml";

   XmlTextReader xml_read;

 

// Класс DataSet  представляет собой расположенный в памяти кэш данных,

// загружаемых из источника данных

// Класс DataSet состоит из коллекции таблиц класса DataTable

   DataSet DataXML;

 

// Класс DataTable представляет одну таблицу с данными в памяти

DataTable MyDatatable = null;

   public Form1()

   {

       InitializeComponent();

   }

   private void Form1_Load(object sender, EventArgs e)

   {

      DataXML = new DataSet ();

// Создание потока для чтения данных из файла, имя которого

// хранится в строке file_name

       FileStream fs = new FileStream(file_name, FileMode.Open);

       xml_read = new XmlTextReader(fs);

       DataXML.ReadXml(xml_read, XmlReadMode.InferSchema);

       MyDatatable = DataXML.Tables[0];

       bindingSource1.DataMember = DataXML.Tables[0].ToString();

       bindingSource1.DataSource = DataXML.Tables[0];

this.bindingNavigator1.BindingSource = bindingSource1;

    dataGridView1.DataSource = bindingSource1;

    dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;

// Задание размеров и заголовков столбцов элемента dataGridView 1

    dataGridView1.Columns[0].Width = 250;

    dataGridView1.Columns[0].HeaderText = " Название ";

    dataGridView1.Columns[1].Width = 160;

    dataGridView1.Columns[1].HeaderText = " Автор ";

    dataGridView1.Columns[2].Width = 55;

    dataGridView1.Columns[2].HeaderText = " Страниц ";

    dataGridView1.Columns[3].Width = 55;

    dataGridView1.Columns[3].HeaderText = " Цена ";

    dataGridView1.Columns[4].Width = 55;

    dataGridView1.Columns[4].HeaderText = " Год ";

    fs. Close ();

           }

 

// Щелчок по кнопке Сохранить изменения

private void button1_Click(object sender, EventArgs e)

   {

DataXML.WriteXml(file_name, XmlWriteMode.IgnoreSchema);

   }                     

 

// Щелчок по кнопке Результат фильтрации

private void button2_Click(object sender, EventArgs e)

   {

// Если строка для поиска данных является пустой

       if (textBox1.Text == " ")

       {

           MessageBox.Show("Вы не ввели данные для выполнения

           фильтрации в базе данных!");

           return;

       }

DataView dv = new DataView(DataXML.Tables[0]);

// Если нажата радиокнопка для поиска данных по дате

       if (radioButton4.Checked == true)

       {

           uint g = Convert.ToUInt32(textBox1.Text);

           dv.RowFilter = "PDATA=’" + g + "’'";

       }

// Если нажата радиокнопка для поиска данных по названию

       if (radioButton1.Checked == true)

       {

           string t = textBox1.Text;

           dv.RowFilter = "TITLE=’" + t + "’'"

       }

// Если нажата радиокнопка для поиска данных по автору

       if (radioButton5.Checked == true)

       {

           string a = textBox1.Text;

           dv.RowFilter = "AUTHOR='" + a + "'";

       }

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

       if (radioButton2.Checked == true)

       {

           uint p = Convert.ToUInt32(textBox1.Text);

           dv.RowFilter = "PAGES='" + p + "'";

       }

// Если нажата радиокнопка для поиска данных по цене

       if (radioButton3.Checked == true)

       {

           uint pr = Convert.ToUInt32(textBox1.Text);

           dv.RowFilter = "PRICE='" + pr + "'";

       }

       bindingSource1.DataSource = dv;

       this.bindingNavigator1.BindingSource = bindingSource1;

       dataGridView1.EditMode = false;

       dataGridView1.DataSource = bindingSource1;

       dataGridView1.EditMode = DataGridViewEdit

       Mode.EditProgrammatically;

   }

// Щелчок по кнопке Отобразить все

private void button3_Click(object sender, EventArgs e)

   {

       bindingSource1.DataSource = DataXML.Tables[0];

       this.bindingNavigator1.BindingSource = bindingSource1;

          dataGridView1.DataSource = bindingSource1;

       dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;

              }

       }

   }

Разработка приложения КАТАЛОГ ТОВАРОВ. Рассмотрим пример разработки приложения, отображающего информацию о каталоге товаров. Хранилищем данных о товарах является файл с именем catalogue. xml, содержимое которого представлено в листинге 8.9.
В файле хранятся данные о коде товара, наименовании, цене, фотография товара и его краткое описание. Приложение позволяет просматривать каталог товаров, включая их изображения.

Листинг 8.9. Файл catalogue. xml

 

<?xml version="1.0" encoding="utf-8"?>

<catalogue>

<unit>

<uCode>003782</uCode>

<uTitle> Чайник </uTitle>

<uMemo>Чайник из нержавеющей стали. Объем: 1,5 л.</uMemo>

<uPrice>670,50</uPrice>

<uImage>i001.jpg</uImage>

</unit>

       <unit>

                   <uCode>012345</uCode>

                   <uTitle> Чашка с блюдцем </uTitle>

                   <uMemo>Чашка с блюдцем. Керамика. Цвет: синий,

                              зеленый, красный.</uMemo>

                   <uPrice>99,00</uPrice>

                   <uImage>i002.jpg</uImage>

       </unit>

       <unit>

                   <uCode>01524</uCode>

                   <uTitle> Комплект столовой мебели </uTitle>

                   <uMemo>Комплект столовой мебели. Стол + 4 стула.

                              Материал: массив клена.</uMemo>

                   <uPrice>3900,00</uPrice>

                   <uImage>i003.jpg</uImage>

       </unit>

       <unit>

                   <uCode>01555</uCode>

                   <uTitle> Лампа настольная </uTitle>

                   <uMemo>Лампа настольная. 40 Вт. Материал:

                              керамика.</uMemo>

                   <uPrice>549,50</uPrice>

                   <uImage>i006.jpg</uImage>

       </unit>

       <unit>

                   <uCode>01325</uCode>

                   <uTitle> Миска </uTitle>

                   <uMemo>Миска керамическая. Цвет: коричневый+

                              бежевый, голубой+белый.</uMemo>

                   < uPrice >49,50</ uPrice >

                   <uImage>i012.jpg</uImage>

       </unit>

       <unit>

                   <uCode>01197</uCode>

                   <uTitle> Люстра </uTitle>

                   <uMemo>Люстра. 40 Вт. Хромированное

                              покрытие.</uMemo>

                   <uPrice>1549,50</uPrice>

                   <uImage>i011.jpg</uImage>

       </unit>

</catalogue>

 

Для проектирования интерфейса приложения на форме следует разместить элементы управления, как показано на рис. 8.9.

dataGridView1
textBox 2
textBox2
textBox4  
textBox3
textBox5  
textBox1  
pictureBox1

Рис. 8.9. Размещение элементов управления на форме

при проектировании  приложения Каталог товаров

Код приложения представлен в листинге 8.10.

Листинг 8.10. Код приложения Каталог товаров

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Xml;



Поделиться:


Последнее изменение этой страницы: 2022-09-03; просмотров: 21; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.146.255.127 (0.389 с.)