Российская международная академия туризма
Опубликован: 09.09.2008 | Доступ: свободный | Студентов: 807 / 36 | Оценка: 4.33 / 4.33 | Длительность: 13:07:00
Лекция 11:

Добавление-удаление записей

< Лекция 10 || Лекция 11: 123 || Лекция 12 >
Аннотация: В лекции описаны классы, предназначенные для работы с XML. Рассмотрен пример работы с записями в базах данных формата XML. Подробно рассмотрены операции чтения, записи, сортировки, добавления и удаления записей

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

Разработка: Приложение "CARD VISA" для просмотра, добавления, редактирования, удаления записей и математической обработки данных движения средств на пластиковой карточке.

Состав выполняемых функций:

  • Файловые операции: открыть, сохранить, сохранить как, закрыть
  • Алгоритмы: просмотр и прокрутка записей базы в текстовых полях, таблицах; просмотр отдельной записи; фильтрация и группмировка записей, подсчет сумм расходов по операциям и остатка средств на карточке
  • Информационно-справочные: О программе

Наращивание функциональности не предусматривается.

Защита данных – от неквалифицированных действий пользователя.

В качестве входных данных используются файлы в формате XML. Выходные данные программы – графическое отображение результатов в виде текстовых полей и таблиц для SmartDevice; файлы в формате XML

Шаг 1. Разработка графического интерфейса

Для разработке используется одна форма со свойством ComboBox=False, tabControl с двумя закладками "База данных" и "Редактор".

На закладке "База данных" размещены надпись "Остаток" с текстовым полем (свойство RaedOnly=True ), кнопка поиска "Найти" и таличный элемент DataGrid.

На закладке "Редактор" размещены надписи "Сумма", "Цель", "Фирма", "Дата" с соответствующими полями (для поля даты свойство ReadOnly=True ); поле для вывода значения идентификационного номера записи со свойством ReadOnly=True; заголовочная надпись "День-Месяц-Год" с тремя комбобоксами (коллекции комбобоксов: день – от 01 до 31; месяц – от 01 до 12; год - на 10 лет вперед, например, от 07 до 17); кнопки "Фильтр ЦЕЛЬ", "Фильтр ФИРМА", "Показать все", "Добавить", "Удалить", "Заменить".

Примерный дизайн показан на рис. 10.1 и 10.2


Рис. 10.1.

Рис. 10.2.

Невидимые элементы управления: mainMenu с опциями "Открыть", "Сохранить как" и "Выход"; openFileDialog и saveFileDialog. - для диалогов свойство Filter =Документы XML|*.xml

Шаг 2. Добавляем библиотеки

using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Data;
// 
using System.IO;
using System.Xml;

Шаг 3. Добавляем переменные в public class Form1 : System.Windows.Forms.Form

// объявляем переменную имени файла
string file_name;
// глобальный датасет
DataSet dataSet,dataSet1;
//глобальный дататейбл
DataTable dataTable, dataTable1;
int my_grid=0;// статус грида, если 0, то грузим редактор, 
если 1, то - фильтр string my_fuel, my_service;
// переменные запроса с группировкой
// переменные полей 
string my_summa,my_cell, my_firma,my_ID;
// переменная номера строки
System.Int64 my_Int64;   
//переменная для удаления строки, чтобы не нарушать коллекцию foreach
DataRow remove_row;
DataRow newRow;
Int64 my_maxID=0;
// установка начального значения текущей даты
string my_day="01";
string my_mon="01";
string my_yea="01";
// фильтр
string my_filt, my_chan;

Шаг 4. Дополняем public Form1()

{
InitializeComponent();
file_name="dataSet.xml"; // тестовый файл загрузки по умолчанию
file_read(); // вызов функции чтения данных из файла
// устанавливаем системную дату для облегчения ввода дат пользователем 
DateTime curDate = new DateTime();
curDate=DateTime.Now;
my_day=curDate.ToString("dd.MM.yyyy").Substring(0,2);
my_mon=curDate.ToString("dd.MM.yyyy").Substring(3,2);
my_yea=curDate.ToString("dd.MM.yyyy").Substring(8,2);
// грузим дату в комбобоксы
this.comboBox1.Text=my_day;
this.comboBox2.Text=my_mon;
this.comboBox3.Text=my_yea;
}

Шаг 5. Создаем функцию file_read()

Фунция открывает файл для чтения и грузит данные в Датагрид, затем рекурсивно вызывает функцию подсчета остатка средств на карточке

private void file_read() {
FileStream fin;		
try {
fin=new FileStream(file_name,FileMode.Open);
fin.Close();
	}
catch(IOException exc) {
MessageBox.Show ("Невозможно открыть файл \n"+file_name,"Ошибка");
return;}
// Считываем значения из файла
XmlTextReader xml_in=new XmlTextReader(file_name); 
dataSet=new DataSet();
dataTable=dataSet.Tables.Add("CardVISA");
// добавляем столбцы
dataTable.Columns.Add("Сумма",System.Type.GetType("System.String"));
dataTable.Columns.Add("Цель",System.Type.GetType("System.String"));
dataTable.Columns.Add("Фирма",System.Type.GetType("System.String"));
dataTable.Columns.Add("Дата",System.Type.GetType("System.String"));
dataTable.Columns.Add("ID",System.Type.GetType("System.Int64"));
dataSet.ReadXml(@xml_in);
xml_in.Close(); // закрываем входящий поток
// сначала сортируем строки по столбцу ID
DataView sortedView=new DataView(dataTable);
// обратная сортировка	
sortedView.Sort="ID DESC";
// привязываем
dataGrid1.DataSource=sortedView;
balance(); // вызываем функцию пересчета остатка
}

Шаг 6. Создаем функцию подсчета остатка средств на карточке balance()

private void balance() {
float my_balance=0;
foreach (DataRow row in dataTable.Rows) {// цикл построчного пересчета
my_summa=(row["Сумма"].ToString());
my_balance=my_balance+float.Parse(my_summa); // нарастающий итог
}
textBox6.Text=my_balance.ToString(); // показываем результат
}
< Лекция 10 || Лекция 11: 123 || Лекция 12 >