private void searchTextBox_TextChanged(object sender, EventArgs e) { TextBox textBox = sender as TextBox; //при уменьшении текста обновлять collection до начальной версии if (textBox.TextLength < Convert.ToInt32(textBox.Tag)) { collection = tempCollect; } List <Prisoner> query = (from p in this.collection where p.FirstName.ToLowerInvariant().Contains(this.searchTextBox.Text.ToLowerInvariant()) || p.NickName.ToLowerInvariant().Contains(this.searchTextBox.Text.ToLowerInvariant()) || p.Profession.ToLowerInvariant().Contains(this.searchTextBox.Text.ToLowerInvariant()) || p.Citizenship.ToLowerInvariant().Contains(this.searchTextBox.Text.ToLowerInvariant()) select p).ToList(); if (query.Count != 0) { BindingSourceDGV((PrisonerCollections)query); } else if (string.IsNullOrEmpty(searchTextBox.Text)) { BindingSourceDGV(tempCollect); } else { MessageBox.Show("Сoncluded by the specified criteria it is not revealed"); searchTextBox.Clear(); } textBox.Tag = textBox.TextLength; }
/// <summary> /// Отрисовка фото в таблице. /// </summary> private void SetPhotoPrisoner(PrisonerCollections pC) { for (int i = 0; i < pC.Count; i++) { this.dataGrid.Rows[i].Cells[0].Value = new Bitmap((pC[i].Photos.firstPhoto)); } }
/// <summary> /// Заполняем коллекцию данными, которые /// хранятся в файле и привязываем к таблице. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { DataBase.ReadFileVoid(ref collection); BindingSourceDGV(collection); //сохраняем начальное состояние коллекции tempCollect = collection; countOfPrisonerLabel.Tag = collection.Count; }
/// <summary> /// Добавление нового заключенного (вызов формы AddPrison). /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void addToolStripMenuItem1_Click(object sender, EventArgs e) { AddPrison add = new AddPrison(); collection = tempCollect; if (add.ShowDialog() == DialogResult.OK) { collection.Add(add.GetPrisoner()); BindingSourceDGV(collection); } searchTextBox.Clear(); }
/// <summary> /// Метод по привзяке текущего состояния коллекции к dataGridView. /// </summary> /// <param name="collect"></param> private void BindingSourceDGV(PrisonerCollections collect) { //если коллекция пустая, делаем ее недоступной if (collection.Count == 0) { dataGrid.Enabled = false; } else { dataGrid.Enabled = true; } if (collect != null) { collection = collect; this.bindingSource1.DataSource = new BindingSource(collection, null); SetPhotoPrisoner(collection); SetValueLabel(); } }
/// <summary> /// Сортировка при нажатии на заголовок таблицы /// (т.к. таблица првязана к bindingsource, то использование встроеного sort невозможно) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGrid_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { List <Prisoner> newcollection = null; string headerTextProp = this.dataGrid.Columns[e.ColumnIndex].DataPropertyName; newcollection = this.collection.OrderBy(headerTextProp).ToList(); if (newcollection != null) { //использование explisit оператора для конвертирования List<Prisoner> to PrisonerCollections PrisonerCollections rezultcollect = (PrisonerCollections)newcollection; BindingSourceDGV(rezultcollect); //проверка на равенство изначальной длины коллекции с длиной кол. в результате запроса //если != то, перезаписывания tempCollect не происходит if ((int)countOfPrisonerLabel.Tag == rezultcollect.Count) { tempCollect = rezultcollect; } } }
/// <summary> /// При закрытии программы сохраняем состояние коллеции. /// </summary> private void Form1_FormClosing(object sender, FormClosingEventArgs e) { collection = tempCollect; DataBase.WriteToFile(ref collection); }
private void ShowInfo(PrisonerCollections collection, int index) { Info info = new Info(collection[index]); info.ShowDialog(); }