WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 |

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

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

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

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

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

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

В качестве входных данных используются файлы в формате XML. Выходные данные программы – графическое отображение результатов в виде текстовых полей и таблиц для SmartDevice; файлы в формате XML Шаг 1. Разработка графического интерфейса Для разработке используется одна форма со свойством ComboBox=False, tabControl с двумя закладками «База данных» и «Редактор».

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

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

Примерный дизайн показан на рис. 24 и Рис. Рис. Невидимые элементы управления: 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(); // показываем результат } Шаг 7. Создаем процедуру открытия файла Если файл DataSet.xml отсутствует или ведет расчеты по другой карточке для опции главного меню «Открыть» пишем:

// читаем файл private void menuItem2_Click(object sender, System.EventArgs e) { if (openFileDialog1.ShowDialog()==DialogResult.OK) { file_name=openFileDialog1.FileName;

file_read();

} } Шаг 8. Создаем процедуру сохранения файла Для опции главного меню «Сохранить как» пишем:

private void menuItem3_Click(object sender, System.EventArgs e) { saveFileDialog1.FileName=file_name;

if (saveFileDialog1.ShowDialog()==DialogResult.OK) { file_name=saveFileDialog1.FileName;

FileStream fin_out; try { fin_out=new FileStream(file_name,FileMode.OpenOrCreate);

fin_out.Close();

} catch(IOException exc) { MessageBox.Show ("Невозможно открыть файл.","Ошибка");

return;} StreamWriter xml_out;

try { xml_out=new StreamWriter(file_name);

} catch(IOException exc) { MessageBox.Show ("Невозможно открыть файл.","Ошибка");

return;} // форматируем xml XmlTextWriter xmlWriter=new XmlTextWriter(xml_out);

xmlWriter.Formatting=Formatting.Indented;

xmlWriter.Indentation=3;

// принимаем изменения в dataSet !!! this.dataTable.AcceptChanges();

// выводим в xml dataSet.WriteXml(xmlWriter,XmlWriteMode.IgnoreSchema);

xmlWriter.Close();

MessageBox.Show("Файл записан в формате XML","Сохранение");

} } Шаг 9. Выходим из программы Для опции главного меню «Выход» пишем:

private void menuItem4_Click(object sender, System.EventArgs e) { Application.Exit(); // что не очень хорошо, если изменения еще не записаны } Шаг 10. Создаем функцию считывания данных из полей закладки «Редактор» private void appe_row() { // заполняем текстбох даты my_day=this.comboBox1.Text;

my_mon=this.comboBox2.Text;

my_yea=this.comboBox3.Text;

this.textBox4.Text=my_day+""+my_mon+""+my_yea;

// вычисляем длину строки int my_len=textBox1.Text.Length;

if (my_len>=2) { // проверяем минус, если вводится отрицательное число if (textBox1.Text.Substring(0,1)=="") { // проверяем вторую цифру if (!char.IsDigit(textBox1.Text[1])) { MessageBox.Show("Введите отрицательную сумму!","Ошибка");

return;} } else // проверяем первую if (!char.IsDigit(textBox1.Text[0])) { MessageBox.Show("Введите сумму!","Ошибка");

return;} // если длина больше 2х else if (!char.IsDigit(textBox1.Text[0])) { MessageBox.Show("Введите сумму!","Ошибка");

return;} } } Шаг 11. Создаем процедуру добавления записи в базу Для кнопки «Добавить» закладки «Редактор» пишем:

private void button1_Click(object sender, System.EventArgs e) { appe_row(); // считываем значение полей закладки «Редактор» // вычисляем последнее значения foreach (DataRow row2 in dataTable.Rows) { string my_IDD=(row2["ID"].ToString());

my_Int64=Int64.Parse(my_IDD);

if (my_maxID<=my_Int64) { my_maxID=my_Int64+1;

} } this.textBox5.Text=my_maxID.ToString();

my_maxID=0; // обнуляем максимальный номер и вводим данные newRow=dataTable.NewRow();

newRow["Сумма"]=this.textBox1.Text;





newRow["Цель"]=this.textBox2.Text;

newRow["Фирма"]=this.textBox3.Text;

newRow["Дата"]=this.textBox4.Text; newRow["ID"]=this.textBox5.Text;

// добавляем запись dataTable.Rows.Add(newRow);

this.tabControl1.SelectedIndex=0; // переключаемя за закладку «База данных» balance(); // считаем остаток на карточке } Шаг 12. Создаем процедуру удаления записи Для кнопки «Удалить» закладка «Редактор» пишем:

private void button2_Click(object sender, System.EventArgs e) { if (this.textBox5.Text = = "0") {// если идентификационный номер строки MessageBox.Show("Строка уже удалена","Ошибка");

return;} string remove_ID=textBox5.Text;

foreach (DataRow row in dataTable.Rows) { my_ID=(row["ID"].ToString()); if (my_ID = = remove_ID) { remove_row=row;

} } dataTable.Rows.Remove(remove_row);

// обнуляем номер строки, чтобы избежать исключения о ненайденной строке this.textBox5.Text="0";

this.tabControl1.SelectedIndex=0;

balance(); // пересчитываем остаток } Шаг 13. Создаем процедуру замены записи при редактировании данных Для кнопки «Заменить» закладки «Редактор» пишем:

private void button3_Click(object sender, System.EventArgs e) { // сначала удаляем строку if (this.textBox5.Text=="0") { MessageBox.Show("Строка уже удалена","Ошибка");

return;} string remove_ID=textBox5.Text;

foreach (DataRow row in dataTable.Rows) { my_ID=(row["ID"].ToString()); if (my_ID==remove_ID) { remove_row=row; } } dataTable.Rows.Remove(remove_row);

// считываем значения appe_row();

// вводим данные newRow=dataTable.NewRow();

newRow["Сумма"]=this.textBox1.Text;

newRow["Цель"]=this.textBox2.Text;

newRow["Фирма"]=this.textBox3.Text;

newRow["Дата"]=this.textBox4.Text; // переписываем номер newRow["ID"]=remove_ID;

// добавляем запись dataTable.Rows.Add(newRow);

// обнуляем номер строки, чтобы избежать исключения о ненайденной строке this.textBox5.Text="0";

this.tabControl1.SelectedIndex=0;

balance();

} Шаг 14. Создаем функцию фильтра целевых расходов private void cell_sum() { float my_balance=0;

foreach (DataRow row in dataTable.Rows) { my_summa=(row["Сумма"].ToString());

my_cell=(row[my_chan].ToString());

if (my_filt==my_cell) { my_balance=my_balance+float.Parse(my_summa);

} } textBox6.Text=my_balance.ToString();

} Шаг 15. Создаем процедуру фильтрации целевых расходов Для кнопки «Фильтр цели» пишем:

private void button4_Click(object sender, System.EventArgs e) { // внимательно: в кавычки берется апостроф dataTable.DefaultView.RowFilter="Цель='"+this.textBox2.Text+"'";

dataGrid1.DataSource=dataTable;

this.tabControl1.SelectedIndex=0;

my_filt=this.textBox2.Text;

my_chan="Цель";

cell_sum(); // считаем результат } Шаг 16. Создаем процедуру фильтрации расходов по фирмам Для кнопки «Фильтр фирмы» пишем:

private void button6_Click(object sender, System.EventArgs e) { dataTable.DefaultView.RowFilter="Фирма='"+this.textBox3.Text+"'";

dataGrid1.DataSource=dataTable;

this.tabControl1.SelectedIndex=0;

my_filt=this.textBox3.Text;

my_chan="Фирма";

cell_sum();

} Шаг 17. Создаем процедуру удаления фильтра Для кнопки «Показать все» пишем:

private void button5_Click(object sender, System.EventArgs e) { DataView sortedView=new DataView(dataTable);

// обратная сортировка sortedView.Sort="ID DESC";

dataGrid1.DataSource=sortedView;

this.tabControl1.SelectedIndex=0;

balance();

} Шаг 18. Создаем процедуру запроса с группировкой данных Для кнопки «Найти» закладки «База данных» пишем:

private void My_Query(){ // выборка целей платежей создаем структуру таблицы DataSet dataSet1=new DataSet();

dataTable1=dataSet1.Tables.Add("Платежи");

// добавляем столбцы dataTable1.Columns.Add("Цель",System.Type.GetType("System.String"));

dataTable1.Columns.Add("Сумма",System.Type.GetType("System.String"));

// добавляем первую строку для шаблона int my_test=0;

string my_sum;

float my_summa=0;

foreach (DataRow row in dataTable.Rows) { // перебираем все записи my_fuel=(row["Цель"].ToString());

my_test=0;

Pages:     || 2 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.