Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.IO;
- namespace Lab6_mod4
- {
- public partial class Form1 : Form
- {
- private string path; //путь к файлу
- public List<PRICE> listProduct = new List<PRICE>(); //коллекция, которая хранит наши записи
- public Form1()
- {
- InitializeComponent();
- }
- private void OpenBDToolStripMenuItem_Click(object sender, EventArgs e)
- {
- //создаем экземпляр класса диалогового окна открытия файла
- OpenFileDialog openFileDialog1 = new OpenFileDialog();
- if (openFileDialog1.ShowDialog() == DialogResult.OK)
- {
- path = openFileDialog1.FileName;
- //если файл был выбран
- if (path != null)
- {
- using (StreamReader myStream = new StreamReader(path))
- {
- //считываем его в строку до конца
- string data = myStream.ReadToEnd();
- myStream.Close();
- int i = 0; //для цикла
- PRICE temp; //временная переменная типа PRICE
- /*
- * Вообще говоря, лучше тут использовать for, но я что-то решил выебнутся неподумав
- */
- //перебираем считанные данные разбитые по строчно
- foreach (string str in data.Split(new char[] { '\n' }))
- {
- temp = new PRICE();
- //разбиваем считанную строку на массив строк. Разбиваем на столбцы
- string[] cell =str.Split(new char[] {'\t'});
- //Записываем в нащ экземпляр структуры
- temp.NameProduct = cell[0];
- temp.NameShop = cell[1];
- temp.PriceProduct = double.Parse(cell[2]);
- //добавляем в нашу коллекцию
- listProduct.Add(temp);
- //выводим строку в форму
- dataGridView1.RowCount++;
- dataGridView1.Rows[i].Cells[0].Value = temp.NameProduct;
- dataGridView1.Rows[i].Cells[1].Value = temp.NameShop;
- dataGridView1.Rows[i].Cells[2].Value = temp.PriceProduct.ToString();
- i++;
- }
- }
- }
- }
- //активируем кнопку фильтрации
- button2.Enabled = true;
- }
- private string ToStringList()
- {
- //метод преобразует коллекцию в строку, чтобы потом ее вывести
- string s = "";
- for (int i = 0; i < listProduct.Count; i++)
- {
- s += listProduct[i].ToString();
- if (i != listProduct.Count - 1)
- {
- s += "\n";
- }
- }
- return s;
- }
- private void saveBDkakToolStripMenuItem_Click(object sender, EventArgs e)
- {
- //обработчик, который сохраняет файл
- //конвертируем список в строку
- string s = ToStringList();
- //создаем диалоговое окно сохранения файлы
- SaveFileDialog saveFileDialog1 = new SaveFileDialog();
- //Фильтрация расширений
- saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
- if (saveFileDialog1.ShowDialog() == DialogResult.OK)
- {
- //сохраняем путь в переменную
- path = saveFileDialog1.FileName;
- //если путь не пуст
- if (path != null)
- {
- //записываем строку в файл
- using (StreamWriter myStreamWrite = new StreamWriter(path))
- {
- myStreamWrite.Write(s);
- myStreamWrite.Close();
- }
- }
- }
- //Активируем пункт "Сохранит" в меню
- saveBDToolStripMenuItem.Enabled = true;
- }
- void dataGridView1_CellValueChanged(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
- {
- //обработчик, который вызывается при изменение начения в ячейки
- //Если строка, в которой произошло изменение, больше чем кол-во элементов в коллекции(что означает, что мы добавляем новую запись)
- if (e.RowIndex >= listProduct.Count)
- {
- //Создаем экземпляр для жиой записи
- PRICE newRow = new PRICE();
- //Узнаем, какая ячейка изменяется
- switch(e.ColumnIndex)
- {
- case 0:
- {
- newRow.NameProduct = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
- break;
- }
- case 1:
- {
- newRow.NameShop = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
- break;
- }
- case 2:
- {
- try
- {
- newRow.PriceProduct = Convert.ToDouble(dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString());
- }
- catch (FormatException)
- {
- if (dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString().Length != 0)
- {
- dataGridView1.Rows[e.RowIndex].Cells[2].Value = "";
- }
- }
- break;
- }
- default: break;
- }
- //добавляем новую запись в коллекцию
- listProduct.Add(newRow);
- }
- //Обрабатываем редактирование уже существующей в коллекции записи
- else if(e.RowIndex >= 0)
- {
- //Записываем существующую запись в переменную
- PRICE editedRow = listProduct[e.RowIndex];
- //Узнаем в какой ячейки произошло изменение
- switch (e.ColumnIndex)
- {
- case 0:
- {
- editedRow.NameProduct = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
- break;
- }
- case 1:
- {
- editedRow.NameShop = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
- break;
- }
- case 2:
- {
- try
- {
- editedRow.PriceProduct = Convert.ToDouble(dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString());
- }
- catch (FormatException)
- {
- if (dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString().Length != 0)
- {
- dataGridView1.Rows[e.RowIndex].Cells[2].Value = "";
- }
- }
- break;
- }
- default: break;
- }
- //Заменяем строку на новую
- listProduct[e.RowIndex] = editedRow;
- }
- }
- void dataGridView1_RowsRemoved(object sender, System.Windows.Forms.DataGridViewRowsRemovedEventArgs e)
- {
- //обработчик, который вызывается при удалении строки в форме
- //нам нужно удалить это строку из коллекции
- RemovedRows(e.RowIndex, e.RowCount);
- }
- void RemovedRows(int index, int count)
- {
- //метод для удаления строки из коллекции
- for (int i = 0; i < count; i++)
- {
- listProduct.RemoveAt(index + i);
- }
- }
- void dataGridView1_RowHeaderMouseClick(object sender, System.Windows.Forms.DataGridViewCellMouseEventArgs e)
- {
- //обработчик, который активирует кнопку "Удаление строки"
- if (!dataGridView1.Rows[e.RowIndex].IsNewRow)
- {
- button1.Enabled = true;
- }
- else
- {
- button1.Enabled = false;
- }
- }
- private void button1_Click(object sender, EventArgs e)
- {
- //Удаляем строки
- for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
- {
- dataGridView1.Rows.Remove(dataGridView1.SelectedRows[i]);
- }
- }
- private void label1_Click(object sender, EventArgs e)
- {
- }
- private void button2_Click(object sender, EventArgs e)
- {
- //Обработчик для фильтрации
- //конвертируем значение из текстового поля
- double priceFilter = 0;
- if (textBox1.Text != "")
- {
- priceFilter = double.Parse(textBox1.Text);
- }
- double priceBD; //переменная для хранения цены из БД
- bool flag = true; //флаг для того, чтобы понять была ли найдена хотя бы одна запись
- //фильтруем
- for(int i=0; i < dataGridView1.RowCount; i++)
- {
- //если это не новая строка
- if(!dataGridView1.Rows[i].IsNewRow)
- {
- priceBD = double.Parse(dataGridView1.Rows[i].Cells[2].Value.ToString()); //достаем цену из БД
- //проверяем строчку на соответствие фильтрам
- if (!(dataGridView1.Rows[i].Cells[0].Value.ToString().IndexOf(textBox3.Text) >= 0 && dataGridView1.Rows[i].Cells[1].Value.ToString().IndexOf(textBox2.Text) >= 0 && (priceBD == priceFilter || priceFilter == 0)))
- {
- //скрываем строку, если она не соответствует фильтрам
- dataGridView1.Rows[i].Visible = false;
- }
- else
- {
- flag = false;
- }
- }
- }
- if (flag)
- {
- MessageBox.Show("Не найдено записей удовлетворяющих условию");
- }
- //активируем кнопку очистки фильтров
- button3.Enabled = true;
- }
- private void button3_Click(object sender, EventArgs e)
- {
- //очищаем фильтрацию
- for (int i = 0; i < dataGridView1.RowCount; i++)
- {
- dataGridView1.Rows[i].Visible = true;
- }
- button3.Enabled = false;
- }
- private void saveBDToolStripMenuItem_Click(object sender, EventArgs e)
- {
- //обработчик для сохранения в уже открытый файл
- string s = ToStringList();
- if (path != null)
- {
- using (StreamWriter myStreamWrite = new StreamWriter(path))
- {
- myStreamWrite.Write(s);
- myStreamWrite.Close();
- }
- }
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- }
- private void informationToolStripMenuItem_Click(object sender, EventArgs e)
- {
- MessageBox.Show("slapoguzov@gmail.com");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement