Добавление-удаление записей
Задача темы: изучить методику и получить навыки в разработке приложений для манипулирования записями в базах данных формата 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
Невидимые элементы управления: 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(); // показываем результат }