Advertisement
Slapoguzov

Form1.cs

May 27th, 2014
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 13.82 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;
  10.  
  11. namespace Lab6_mod4
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         private string path;                                    //путь к файлу
  16.         public List<PRICE> listProduct = new List<PRICE>();     //коллекция, которая хранит наши записи
  17.         public Form1()
  18.         {
  19.             InitializeComponent();
  20.         }
  21.  
  22.         private void OpenBDToolStripMenuItem_Click(object sender, EventArgs e)
  23.         {
  24.             //создаем экземпляр класса диалогового окна открытия файла
  25.             OpenFileDialog openFileDialog1 = new OpenFileDialog();
  26.  
  27.             if (openFileDialog1.ShowDialog() == DialogResult.OK)
  28.             {
  29.                 path = openFileDialog1.FileName;
  30.  
  31.                 //если файл был выбран
  32.                 if (path != null)
  33.                 {
  34.                     using (StreamReader myStream = new StreamReader(path))
  35.                     {
  36.                         //считываем его в строку до конца
  37.                         string data = myStream.ReadToEnd();
  38.                         myStream.Close();
  39.  
  40.                         int i = 0;                      //для цикла
  41.                         PRICE temp;                     //временная переменная типа PRICE
  42.  
  43.                         /*
  44.                          * Вообще говоря, лучше тут использовать for, но я что-то решил выебнутся неподумав
  45.                          */
  46.                         //перебираем считанные данные разбитые по строчно
  47.                         foreach (string str in data.Split(new char[] { '\n' }))
  48.                         {
  49.                             temp = new PRICE();
  50.  
  51.                             //разбиваем считанную строку на массив строк. Разбиваем на столбцы
  52.                             string[] cell =str.Split(new char[] {'\t'});
  53.        
  54.                             //Записываем в нащ экземпляр структуры
  55.                             temp.NameProduct = cell[0];
  56.                             temp.NameShop = cell[1];
  57.                             temp.PriceProduct = double.Parse(cell[2]);
  58.  
  59.                             //добавляем в нашу коллекцию
  60.                             listProduct.Add(temp);
  61.  
  62.                             //выводим строку в форму
  63.                             dataGridView1.RowCount++;
  64.                             dataGridView1.Rows[i].Cells[0].Value = temp.NameProduct;
  65.                             dataGridView1.Rows[i].Cells[1].Value = temp.NameShop;
  66.                             dataGridView1.Rows[i].Cells[2].Value = temp.PriceProduct.ToString();
  67.  
  68.                             i++;
  69.                         }
  70.                     }
  71.                 }
  72.  
  73.             }
  74.  
  75.             //активируем кнопку фильтрации
  76.             button2.Enabled = true;
  77.         }
  78.  
  79.         private string ToStringList()
  80.         {
  81.             //метод преобразует коллекцию в строку, чтобы потом ее вывести
  82.             string s = "";
  83.             for (int i = 0; i < listProduct.Count; i++)
  84.             {
  85.  
  86.                 s += listProduct[i].ToString();
  87.                 if (i != listProduct.Count - 1)
  88.                 {
  89.                     s += "\n";
  90.                 }
  91.             }
  92.             return s;
  93.         }
  94.  
  95.         private void saveBDkakToolStripMenuItem_Click(object sender, EventArgs e)
  96.         {
  97.             //обработчик, который сохраняет файл
  98.  
  99.             //конвертируем список в строку
  100.             string s = ToStringList();
  101.            
  102.             //создаем диалоговое окно сохранения файлы
  103.             SaveFileDialog saveFileDialog1 = new SaveFileDialog();
  104.  
  105.             //Фильтрация расширений
  106.             saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
  107.  
  108.             if (saveFileDialog1.ShowDialog() == DialogResult.OK)
  109.             {
  110.                 //сохраняем путь в переменную
  111.                 path = saveFileDialog1.FileName;
  112.  
  113.                 //если путь не пуст
  114.                 if (path != null)
  115.                 {
  116.                     //записываем строку в файл
  117.                     using (StreamWriter myStreamWrite = new StreamWriter(path))
  118.                     {
  119.                         myStreamWrite.Write(s);
  120.                         myStreamWrite.Close();
  121.                     }
  122.                 }
  123.  
  124.             }
  125.             //Активируем пункт "Сохранит" в меню
  126.             saveBDToolStripMenuItem.Enabled = true;
  127.            
  128.         }
  129.        
  130.         void dataGridView1_CellValueChanged(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
  131.         {
  132.             //обработчик, который вызывается при изменение начения в ячейки
  133.  
  134.             //Если строка, в которой произошло изменение, больше чем кол-во элементов в коллекции(что означает, что мы добавляем новую запись)
  135.             if (e.RowIndex >= listProduct.Count)
  136.             {
  137.                 //Создаем экземпляр для жиой записи
  138.                 PRICE newRow = new PRICE();
  139.  
  140.                 //Узнаем, какая ячейка изменяется
  141.                 switch(e.ColumnIndex)
  142.                 {
  143.                     case 0:
  144.                         {
  145.                             newRow.NameProduct = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
  146.                             break;
  147.                         }
  148.                     case 1:
  149.                         {
  150.                             newRow.NameShop = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
  151.                             break;
  152.                         }
  153.                     case 2:
  154.                         {
  155.                             try
  156.                             {
  157.                                 newRow.PriceProduct = Convert.ToDouble(dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString());
  158.                             }
  159.                             catch (FormatException)
  160.                             {
  161.                                 if (dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString().Length != 0)
  162.                                 {
  163.                                     dataGridView1.Rows[e.RowIndex].Cells[2].Value = "";
  164.                                 }
  165.                             }
  166.                             break;
  167.                         }
  168.                 default: break;
  169.                 }
  170.  
  171.                 //добавляем новую запись в коллекцию
  172.                 listProduct.Add(newRow);
  173.             }
  174.             //Обрабатываем редактирование уже существующей в коллекции записи
  175.             else if(e.RowIndex >= 0)
  176.             {
  177.                 //Записываем существующую запись в переменную
  178.                 PRICE editedRow = listProduct[e.RowIndex];
  179.  
  180.                 //Узнаем в какой ячейки произошло изменение
  181.                 switch (e.ColumnIndex)
  182.                 {
  183.                     case 0:
  184.                         {
  185.                             editedRow.NameProduct = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
  186.                             break;
  187.                         }
  188.                     case 1:
  189.                         {
  190.                             editedRow.NameShop = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
  191.                             break;
  192.                         }
  193.                     case 2:
  194.                         {
  195.                             try
  196.                             {
  197.                                 editedRow.PriceProduct = Convert.ToDouble(dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString());
  198.                             }
  199.                             catch (FormatException)
  200.                             {
  201.                                 if (dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString().Length != 0)
  202.                                 {
  203.                                     dataGridView1.Rows[e.RowIndex].Cells[2].Value = "";
  204.                                 }
  205.                             }
  206.                             break;
  207.                         }
  208.                     default: break;
  209.                 }
  210.  
  211.                 //Заменяем строку на новую
  212.                 listProduct[e.RowIndex] = editedRow;
  213.             }
  214.  
  215.         }
  216.  
  217.  
  218.         void dataGridView1_RowsRemoved(object sender, System.Windows.Forms.DataGridViewRowsRemovedEventArgs e)
  219.         {
  220.             //обработчик, который вызывается при удалении строки в форме
  221.             //нам нужно удалить это строку из коллекции
  222.             RemovedRows(e.RowIndex, e.RowCount);
  223.         }
  224.  
  225.         void RemovedRows(int index, int count)
  226.         {
  227.             //метод для удаления строки из коллекции
  228.             for (int i = 0; i < count; i++)
  229.             {
  230.                 listProduct.RemoveAt(index + i);
  231.             }
  232.         }
  233.  
  234.         void dataGridView1_RowHeaderMouseClick(object sender, System.Windows.Forms.DataGridViewCellMouseEventArgs e)
  235.         {
  236.             //обработчик, который активирует  кнопку "Удаление строки"
  237.             if (!dataGridView1.Rows[e.RowIndex].IsNewRow)
  238.             {
  239.                 button1.Enabled = true;
  240.             }
  241.             else
  242.             {
  243.                 button1.Enabled = false;
  244.             }
  245.         }
  246.  
  247.  
  248.         private void button1_Click(object sender, EventArgs e)
  249.         {
  250.             //Удаляем строки
  251.             for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
  252.             {
  253.                 dataGridView1.Rows.Remove(dataGridView1.SelectedRows[i]);
  254.             }
  255.         }
  256.  
  257.         private void label1_Click(object sender, EventArgs e)
  258.         {
  259.  
  260.         }
  261.  
  262.         private void button2_Click(object sender, EventArgs e)
  263.         {
  264.             //Обработчик для фильтрации
  265.  
  266.             //конвертируем значение из текстового поля
  267.             double priceFilter = 0;
  268.             if (textBox1.Text != "")
  269.             {
  270.                  priceFilter = double.Parse(textBox1.Text);
  271.             }
  272.             double priceBD;                             //переменная для хранения цены из БД
  273.  
  274.             bool flag = true;                           //флаг для того, чтобы понять была ли найдена хотя бы одна запись
  275.  
  276.             //фильтруем
  277.             for(int i=0; i < dataGridView1.RowCount; i++)
  278.             {
  279.                 //если это не новая строка
  280.                 if(!dataGridView1.Rows[i].IsNewRow)
  281.                 {
  282.                 priceBD = double.Parse(dataGridView1.Rows[i].Cells[2].Value.ToString());            //достаем цену из БД
  283.                 //проверяем строчку на соответствие фильтрам
  284.                 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)))
  285.                 {
  286.                     //скрываем строку, если она не соответствует фильтрам
  287.                     dataGridView1.Rows[i].Visible = false;
  288.                 }
  289.                 else
  290.                 {
  291.                     flag = false;
  292.                 }
  293.                 }
  294.             }
  295.  
  296.             if (flag)
  297.             {
  298.                 MessageBox.Show("Не найдено записей удовлетворяющих условию");
  299.             }
  300.             //активируем кнопку очистки фильтров
  301.             button3.Enabled = true;
  302.         }
  303.  
  304.         private void button3_Click(object sender, EventArgs e)
  305.         {
  306.             //очищаем фильтрацию
  307.             for (int i = 0; i < dataGridView1.RowCount; i++)
  308.             {
  309.                 dataGridView1.Rows[i].Visible = true;
  310.             }
  311.             button3.Enabled = false;
  312.         }
  313.  
  314.         private void saveBDToolStripMenuItem_Click(object sender, EventArgs e)
  315.         {
  316.             //обработчик для сохранения в уже открытый файл
  317.             string s = ToStringList();
  318.             if (path != null)
  319.             {
  320.                 using (StreamWriter myStreamWrite = new StreamWriter(path))
  321.                 {
  322.                     myStreamWrite.Write(s);
  323.                     myStreamWrite.Close();
  324.                 }
  325.             }
  326.         }
  327.  
  328.         private void Form1_Load(object sender, EventArgs e)
  329.         {
  330.            
  331.         }
  332.  
  333.         private void informationToolStripMenuItem_Click(object sender, EventArgs e)
  334.         {
  335.             MessageBox.Show("slapoguzov@gmail.com");
  336.         }
  337.  
  338.     }
  339. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement