С# 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 просмотров]