БлогNot. С# Windows Forms: выполняем поиск в таблице DataGridView

С# Windows Forms: выполняем поиск в таблице DataGridView

С помощью дизайнера форм добавим в окно приложения нужные компоненты и настроим их привязку с помощью свойства Dock: вверху заготовка для главного меню MenuStrip (по умолчанию Dock = Top), под ней контейнер Panel (Dock = Top), на котором разместятся поле ввода searchBox и кнопка запуска поиска searchButton, внизу элемент панели StatusStrip для строки статуса (по умолчанию Dock = Bottom), на нём добавлена метка ToolStripStatusLabel для вывода сообщений, основное место занимает таблица DataGridView (Dock = Fill). После дополнительной настройки формы получаем такой вид окна приложения:

Вид окна приложения
Вид окна приложения

Для нашей задачи нужны только следующие обработчики событий:

В конструкторе формы создадим таблицу данных, заполним её предустановленными данными и привяжем к компоненте:

  public Form1 () {
   InitializeComponent ();
   //Создадим таблицы и заполним данными
   DataTable Table = new DataTable ("Таблица");
   string [] Names = { "ФИО", "З/п", "ДР" };
   for (int i = 0; i < 3; i++) {
    DataColumn Column = new DataColumn (Names[i]);
    Table.Columns.Add (Column);
   }
   string [,] Rows = new string [3, 3] {
    { "Иванов А.П.",  "60000", "11.01.1980" },
    { "Петрова И.С.", "58000", "11.09.2001" },
    { "Сидоров М.В.", "79000", "26.05.1990" }
   };
   for (int i = 0; i < 3; i++) {
    Table.Rows.Add (Rows[i, 0], Rows [i, 1], Rows [i, 2]);
   }
   dataGridView1.DataSource = Table;
  }

В обработчике нажатия кнопки searchButton выполним всю работу по поиску и выделению найденного контента:

  private void searchButton_Click (object sender, EventArgs e) {
   dataGridView1.ClearSelection ();
   if (string.IsNullOrWhiteSpace (searchBox.Text)) {
    statusLabel.Text = "Нечего искать";
    return;
   }
   var value = searchBox.Text.Trim ();
   int cnt = 0, numRow = 0;
   for (int i = 0; i < dataGridView1.RowCount - 1; i++) {
    var row = dataGridView1.Rows [i];
    for (int j = 0; j < dataGridView1.ColumnCount; j++)
     if (row.Cells [j].Value.ToString ().Contains (value)) {
      row.Selected = true;
      //row.Cells [i].Selected = true; //выделить только ячейку
      cnt++;  numRow = i;
      break;
     }
   }
   statusLabel.Text = ( cnt == 0 ? "Не найдено" : "Всего найдено: " + cnt );
   if (cnt > 0) {
    dataGridView1.FirstDisplayedScrollingRowIndex = numRow;
   }
  }

При переходе к редактированию ячейки (событие CellBeginEdit от dataGridView1) очистим поле ввода и строку статуса:

  private void dataGridView1_CellBeginEdit 
   (object sender, DataGridViewCellCancelEventArgs e) {
   searchBox.Text = "";
   statusLabel.Text = "";
  }

 Скачать этот проект C# Visual Studio 2019 в архиве .zip, развернуть в новую папку (12 Кб)

19.04.2024, 19:28 [213 просмотров]


теги: список программирование учебное c#

К этой статье пока нет комментариев, Ваш будет первым