Поиск в datagridview с использованием c #

1

После загрузки таблицы в datagridview я создаю элементы combobox из заголовков столбцов datagrid. Из combobox я выбираю столбец, и у меня есть текстовое поле для значения поиска, заданного пользователем. Я использую следующий код:

        string searchForText = txtCrudSearch.Text;
        dgvLoadTable.ClearSelection();
        dgvLoadTable.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        try
        {
            foreach (DataGridViewRow row in dgvLoadTable.Rows)
            {
                if (row.Cells[cboCrudSearchColumn.SelectedIndex].Value.ToString().Equals(searchForText))
                {
                    row.Selected = true;
                    //if I use break here the code doesn't give exception 
                    //but highlights only one row. I want to return all rows that
                    // match with the search string
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

Теперь проблемы:

  1. Я получаю все сопоставленные строки, выделенные с исключением "Ссылка на объект, не установленная на экземпляр объекта"
  2. Как я могу вернуть все соответствующие строки только в datagrid, а не выделять их?
  3. Поиск чувствителен к регистру, как заставить его работать для всех типов?

Любая помощь будет оценена, спасибо.

  • 0
    Ошибка, возможно, находится в строке "row.Cells [cboCrudSearchColumn.SelectedIndex] .Value.ToString ()". Отладьте и скажите, какое значение возвращает эта строка.
  • 0
    если вы используете DataTable в качестве источника данных, то stackoverflow.com/a/10049875/891715
Показать ещё 3 комментария
Теги:
search
datagridview

1 ответ

0
Лучший ответ

Я понял. В случае, если кто-то нуждается в решении, код выглядит следующим образом:

 private void btnCrudSearch_Click(object sender, EventArgs e)
    {

        dgvLoadTable.CurrentCell = null;
        dgvLoadTable.AllowUserToAddRows = false;
        dgvLoadTable.ClearSelection();
        dgvLoadTable.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        dgvLoadTable.ReadOnly = true;

        try
        {
            foreach (DataGridViewRow row in dgvLoadTable.Rows)
            {
                var cellValue = row.Cells[cboCrudSearchColumn.SelectedIndex].Value;
                if (cellValue != null && cellValue.ToString() == txtCrudSearch.Text.ToUpper())
                {
                    row.Selected = true;
                    row.Visible = true;
                }
                else
                    row.Visible = false;

            }
        }
        catch (Exception exc)
        {
            MessageBox.Show(exc.Message);
        }

    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню