Информационый портал Windows 7

У нас вы можете скачать драйвера и программы, найти красивые темы и обои, учебные материалы, а также получить консультации и многое другое.

  • главная
  • контакты
  • карта сайта
 
Программирование » Уроки по C# для начинающих »

Урок 6. Работа с xml в языке C#.

 

   Язык C# даёт простой и очень удобный способ записи и чтения файлов типа xml – использование DataTable – специальная таблица языка C#, которая позволяет быстро записывать и читать данные xml.

   О других способах рассказывается здесь.

   Для начала подготовим почву: нам нужно задать команды, которые помогут пользователю работать с xml файлами, и поле, в которое пользователь будет вводить текст.

   Поместим на нашу форму элемент TextBox, который у меня называется textBoxNadpis. Естественно, нам придётся указать в свойствах элемента значения:

   MaxLenght 32767999 (здесь я просто приписал три девятки в конце)
   Multiline true
   ScrollBars Both

   Рядом создадим элемент DataGridView с четырьмя колонками и назовём его dataGridViewTable (рис.6.1).

Урок 6. Работа с xml в языке C#.

Рис. 6.1. Так будет выглядеть наша программа.


   Чтобы добавить столбцы в таблицу просто выберите элемент и нажмите правую кнопку мыши. В появившемся меню выберите пункт «добавить столбец» или «правка столбцов». А дальше добавляйте.

   Для дальнейшей работы нам понадобится наличие следующих строк в файле FormOS7ru.cs:

using System.Xml;
using System.Xml.Linq;
using System.Xml.Resolvers;
using System.Xml.Schema;
using System.Xml.Serialization;
using System.Xml.XPath;
using System.Xml.Xsl;
using System.IO;
using System.IO.Compression;
using System.IO.IsolatedStorage;
using System.IO.MemoryMappedFiles;
using System.IO.Pipes;
using System.IO.Ports;
using System.Data.Common;
using System.Data.Odbc;
using System.Data.OleDb;
using System.Data.ProviderBase;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;


   добавим список команд для работы с xml файлами:

   private string[] arrstrVoprosFile_Gpr = { "вопрос", "выход", "строки", "таблица", "текст" };//Здесь хранится список команд для работы с данными в xml
   private string[] arrstrVoprosFileSL_Gpr = { "вопрос", "выход", "загрузить", "отмена", "сохранить" };//Здесь хранится список команд для сохранения/чтения данных в xml


   И добавим основную команду («файл»), которая позволит получить доступ к этим командам:

   private string[] arrstrVopros_Gpr = { "вопрос", "выход", "консоль", "настройки", "файл" }; //Здесь хранится список команд


   Теперь опишем функцию ConsoleKeyEnter_File(string strKeys), которая будет вызываться после ввода пользователем команды «файл» (рис.6.2).

Урок 6. Работа с xml в языке C#.

Рис. 6.2. Функция ConsoleKeyEnter_File(string strKeys).


   Далее, нам придётся описать функцию ConsoleKeyEnter_File_SL(string strKeys), которая вызывается внутри вышеназванной функции (рис.6.3).

Урок 6. Работа с xml в языке C#.

Рис. 6.3. Функция ConsoleKeyEnter_File_SL(string strKeys).


   Как видно из текста, при вводе пользователем команды «сохранить» или «загрузить», вызывается функция xmlFileSL (рис.6.4).

Урок 6. Работа с xml в языке C#.

Рис. 6.4. Функция xmlFileSL(string strKeys).


   Тут всё просто: если пользователь ввёл «сохранить», вызываем функцию сохранения xmlSave (рис.6.5), если «загрузить» - xmlLoad (рис.6.6).

Урок 6. Работа с xml в языке C#.

Рис. 6.5. Функция xmlSave(string strType).


Урок 6. Работа с xml в языке C#.

Рис. 6.6. Функция xmlLoad(string strType).


   Для начала разберём функцию сохранения. Из текста видно, что, если перед этим было введено ключевое слово «строки»:
   case "строки":
   {
      dt = StrToTable(textBoxNadpis.Lines);
   } break;

   вызывается функция, которая записывает набор строк в таблицу:
   private DataTable StrToTable(string[] arrstrStroki)
   {
      DataTable dt = new DataTable("строки");
      dt.Columns.Add("строки");
      for (int i = 0; i < arrstrStroki.Length; i++)
      {
         dt.Rows.Add(arrstrStroki[i]);
      }
      return dt;
   }

   Если же перед этим было введено ключевое слово «таблица»:
   case "таблица":
   {

   Сначала создадим в таблице типа DataTable, которую я назвал dt, столбцы, количество которых совпадает с количеством столбцов в пользовательской таблице dataGridViewTable:
   for (int i = 0; i < dataGridViewTable.Columns.Count;i++ )
   dt.Columns.Add(dataGridViewTable.Columns[i].Name);

   теперь сохраним количество столбцов в настройках (естественно, я заранее ввёл нужную переменную – об этом говорится в предыдущем уроке):
      Properties.Settings.Default.iColumnNumber = dataGridViewTable.Columns.Count;
      Properties.Settings.Default.Save();

   Теперь запишем данные из таблицы dataGridViewTable в dt:
      for (int i = 0; i < dataGridViewTable.Rows.Count; i++)
      {
         List<string> lstrrow = new List<string>();
         for (int j = 0; j < dataGridViewTable.Rows[i].Cells.Count; j++)
         {
            lstrrow.Add((string)dataGridViewTable.Rows[i].Cells[j].Value);
         }
         dt.Rows.Add(lstrrow.ToArray()/*Эта функция копирует элементы списка в массив данных*/);
      }
   } break;

   Здесь я использую список (List lstrrow), так как это самый простой вариант динамически расширяемого массива элементов.

   Более подробно о работе со списком написано здесь.

   Если пользователем введено ключевое слово «текст»:
   case "текст":
      {
         dt.Columns.Add(strType);
         dt.Rows.Add(textBoxNadpis.Text);
      } break;

   здесь мы просто создаём один столбец и записываем данные из textBoxNadpis в таблицу.

   Далее мы сохраняем данные в файле:
   try
   {
      dt.WriteXml(Directory.GetCurrentDirectory() + "\\files\\" + strType + ".xml");//Если директории не существует
   }
   catch
   {
      Directory.CreateDirectory(Directory.GetCurrentDirectory() + "\\files");//Создаём директорию
   }
   finally
   {
      dt.WriteXml(Directory.GetCurrentDirectory() + "\\files\\" + strType + ".xml");//Записываем данные
   }

   Теперь рассмотрим функцию, которая загрузит данные из файла в таблицу.

   Если пользователь ввёл «строки»:
   case "строки":
   {
      dt.Columns.Add(strType);//Добавляем столбец
      dt.ReadXml(Directory.GetCurrentDirectory() + "\\files\\" + strType + ".xml");//Читаем файл
      textBoxNadpis.Lines = TableToStr(dt);//Выводим на экран
   } break;

   Функция TableToStr(dt) просто переводит данные из таблицы в массив типа string:
   private string[] TableToStr(DataTable dt)
   {
      List<string> lstr = new List<string>();
      for (int i = 0; i < dt.Rows.Count;i++ )
         lstr.Add(dt.Rows[i].ItemArray[0].ToString());
      return lstr.ToArray();
   }

   Если введено слово «таблица»:
   case "таблица":
   {
      for (int i = 0; i < Properties.Settings.Default.iColumnNumber; i++) dt.Columns.Add("Column" + (i + 1).ToString());//Создаём несколько столбцов
      dt.ReadXml(Directory.GetCurrentDirectory() + "\\files\\" + strType + ".xml");//Читаем файл
      dataGridViewTable.Columns.Clear();//Очищаем столбцы пользовательской таблицы
      dataGridViewTable.DataSource = dt;//Заполняем пользовательскую таблицу данными из файла
      dataGridViewTable.Invalidate();//Обновляем элемент
   } break;

   dataGridViewTable.DataSource – задаёт источник данных для заполнения таблицы.

   Здесь нужнно учесть, что имена столбцов в таблице dt должны совпадать с именами в файле. Иначе чтение закончится ничем.

   Естественно, нам придётся добавить в функцию ConsoleAutoCompleteSource(string[] arrstrSource) обработку новых команд:
      case "файл":
      {
         switch (arrstrConsoleVvod_Gpr[1])
         {
         case "строки":
         {
            textBoxConsoleMain.AutoCompleteCustomSource.AddRange(arrstrVoprosFileSL_Gpr);
         } break;
         case "таблица":
         {
            textBoxConsoleMain.AutoCompleteCustomSource.AddRange(arrstrVoprosFileSL_Gpr);
         } break;
         case "текст":
         {
            textBoxConsoleMain.AutoCompleteCustomSource.AddRange(arrstrVoprosFileSL_Gpr);
         } break;
         default:
      {
         textBoxConsoleMain.AutoCompleteCustomSource.AddRange(arrstrVoprosFile_Gpr);
      } break;
      }
   } break;

   А так же добавить эти команды в ConsoleKeyEnter(string strKeys) (рис. 6.7).

Урок 6. Работа с xml в языке C#.

Рис. 6.7. Функция ConsoleKeyEnter(string strKeys).


   Теперь запустим программу и проверим, как она работает.

   Сохраним какую-нибудь информацию в каждом из трёх возможных вариантов.

   В результате в папке с программой появится папка «files», где мы найдём три файла: «строки.xml», «таблица.xml», «текст.xml».

   Кому интересно, может открыть их при помощи блокнота и посмотреть содержимое.


   Исходники можно скачать здесь:Вы не можете скачивать файлы с нашего сервера.





     Жду отзывов и предложений

   К списку статей                  Предыдущий уок                  следующий урок

   DiamondTigeR

   
Урок 6. Работа с xml в языке C#.



Автор: d.tiger. Дата: 7-07-2012, 20:32

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

В избранное:

Уважаемый посетитель, для доступа к ресурсам сайта OS-7.RU, а также для скачивания материалов - Вам необходимо зарегистрироваться либо войти под своим именем.







 (голосов: 0)
Комментарии (3) Распечатать