// Загрузить массив из файла public void OpenFile(string filename) { if (!File.Exists(filename)) { throw new Exception("Файл не существует"); } if (ProcFile.Count != 0) { DeleteAllRows(); } using (StreamReader sw = new StreamReader(filename)) { while (!sw.EndOfStream) { string str = sw.ReadLine(); string[] dataFromFile = str.Split(new String[] { "|" }, StringSplitOptions.RemoveEmptyEntries); ushort id = (ushort)Convert.ToInt32(dataFromFile[0]); string title = dataFromFile[1]; string family = dataFromFile[2]; string coresthreads = dataFromFile[3]; ushort year = (ushort)Convert.ToInt32(dataFromFile[4]); string arch = dataFromFile[5]; string socket = dataFromFile[6]; CPU_Row procRow = new CPU_Row(id, title, family, coresthreads, year, arch, socket); AddRow(procRow); } } }
int IComparer.Compare(object x, object y) { CPU_Row procRow1 = (CPU_Row)x; CPU_Row procRow2 = (CPU_Row)y; return((m_direction == SortDirection.Ascending) ? procRow1.ProcYear.CompareTo(procRow2.ProcYear) : procRow2.ProcYear.CompareTo(procRow1.ProcYear)); }
// Изменить год выпуска процессора public void EditProcYear(ushort year, int index) { CPU_Row proc = (CPU_Row)ProcFile[index]; if ((year < 1971) || (year > (DateTime.Now.Year) + 10)) { throw new Exception("Год выпуска должен быть не раньше 1971 и не позднее " + (DateTime.Now.Year) + 10); } proc.ProcYear = year; }
//Нажали на ячейку/строку private void dataGrid_CellClick(object sender, DataGridViewCellEventArgs e) { try { int indRow = dataGrid.Rows[e.RowIndex].Index; CPU_Row _proc = (CPU_Row)data.ProcFile[indRow]; CellClick_TextBoxInfo(_proc); } catch { } }
//И данные из строки поместились в поля на форме private void CellClick_TextBoxInfo(CPU_Row proc) { button_AddRow_Click(button_AddRow, null); textBox_ID.Text = proc.ProcID.ToString(); textBox_Title.Text = proc.ProcTitle; comboBox_Family.Text = proc.ProcFamily; textBox_CoresThreads.Text = proc.ProcCoresThreads; textBox_Year.Text = proc.ProcYear.ToString(); textBox_Arch.Text = proc.ProcArch; textBox_Socket.Text = proc.ProcSocket; TextBoxsDisabled(); }
//Добавить новую запись в базу private void button_Add_Click(object sender, EventArgs e) { try { ProcID = textBox_ID.Text = generateID().ToString(); ProcTitle = textBox_Title.Text; ProcFamily = comboBox_Family.Text; ProcCoresThreads = textBox_CoresThreads.Text; ProcYear = textBox_Year.Text; ProcArch = textBox_Arch.Text; ProcSocket = textBox_Socket.Text; CPU_Row proc = new CPU_Row( (ushort)Convert.ToInt32(textBox_ID.Text), textBox_Title.Text, comboBox_Family.Text, textBox_CoresThreads.Text, (ushort)Convert.ToInt32(textBox_Year.Text), textBox_Arch.Text, textBox_Socket.Text); data.AddRow(proc); int n = data.ProcFile.Count; CPU_Row proc1 = (CPU_Row)data.ProcFile[n - 1]; dataGrid.Rows.Add (proc1.ProcID, textBox_Title.Text, comboBox_Family.Text, textBox_CoresThreads.Text, textBox_Year.Text, textBox_Arch.Text, textBox_Socket.Text); BanChangeColumn(n - 1); TextBoxsClear(); if ((!timer1.Enabled) && (filename != "")) { timer1.Enabled = true; timer1.Start(); } } catch (Exception ex) { MessageBox.Show($"Ошибка: {ex.Message}"); } }
//Записать базу в таблицу private void WriteToDataGrid() { try { for (int i = 0; i < data.ProcFile.Count; i++) { CPU_Row proc = (CPU_Row)data.ProcFile[i]; dataGrid.Rows.Add( proc.ProcID, proc.ProcTitle, proc.ProcFamily, proc.ProcCoresThreads, proc.ProcYear, proc.ProcArch, proc.ProcSocket); BanChangeColumn(i); } } catch (Exception ex) { MessageBox.Show($"Ошибка: {ex.Message}"); } }
// Изменить сокет процессора public void EditProcSocket(string socket, int index) { CPU_Row proc = (CPU_Row)ProcFile[index]; proc.ProcSocket = socket; }
// Изменить архитектуру процессора public void EditProcArch(string arch, int index) { CPU_Row proc = (CPU_Row)ProcFile[index]; proc.ProcArch = arch; }
// Изменить кол-во ядер и потоков public void EditProcCoresThreads(string coresthreads, int index) { CPU_Row proc = (CPU_Row)ProcFile[index]; proc.ProcCoresThreads = coresthreads; }
// Изменить семейство процессора public void EditProcFamily(string family, int index) { CPU_Row proc = (CPU_Row)ProcFile[index]; proc.ProcFamily = family; }
// Изменить название процессора public void EditProcTitle(string title, int index) { CPU_Row proc = (CPU_Row)ProcFile[index]; proc.ProcTitle = title; }
// Добавить новую строку в файл public void AddRow(CPU_Row procRow) { ProcFile.Add(procRow); }
// Поиск совпадений по базе, и получение ID всех найденных записей // Возвращает -1, если совпадений не найдено public List <int> SearchRows(string query) { List <int> count = new List <int>(); //Проверяются ID и год выпуска if (ushort.TryParse(query, out ushort num_query)) { for (int i = 0; i < ProcFile.Count; i++) { CPU_Row procRow = (CPU_Row)ProcFile[i]; if (procRow.ProcID == num_query) { count.Add(i); break; // Если нашли запись по уникальному ID, то закончить поиск } else { if (procRow.ProcYear == num_query) { count.Add(i); } } } if (count.Count == 0) { count.Add(-1); } return(count); } // Поиск по текстовым полям записи query = query.ToLower(); // перевод в нижний регистр query = query.Replace(" ", ""); for (int i = 0; i < ProcFile.Count; i++) { CPU_Row procRow = (CPU_Row)ProcFile[i]; if (procRow.ProcTitle.ToLower().Replace(" ", "").Contains(query)) { count.Add(i); } else if (procRow.ProcFamily.ToLower().Replace(" ", "").Contains(query)) { count.Add(i); } else if (procRow.ProcCoresThreads.ToLower().Replace(" ", "").Contains(query)) { count.Add(i); } else if (procRow.ProcArch.ToLower().Replace(" ", "").Contains(query)) { count.Add(i); } else if (procRow.ProcSocket.ToLower().Replace(" ", "").Contains(query)) { count.Add(i); } } if (count.Count == 0) { count.Add(-1); } return(count); }