Сортировать содержимое DataTable в соответствии с TextBox - PullRequest
0 голосов
/ 25 января 2019

Я хотел бы выбрать строки моего DataGridView, поместив искомое значение в текстовое поле. Также я хотел бы, чтобы наиболее идентичное значение было сфокусировано на / выделено.
Я уже пытался использовать функцию rowfilter, которая дала мне это:

(dgv_DetailComptes.DataSource as DataTable).DefaultView.RowFilter = string.Format("Champ LIKE '%{0}%'", tbx_champ_Cpt.Text);

Тем не менее, он фильтрует строки, что означает, что другие строки исчезают, когда их содержимое отличается от того, которое я ищу. Я хотел бы сохранить строки в своей таблице и выбрать строки, содержащие искомое значение.
Кроме того, мой DGV берет свои строки / столбцы / значения из таблицы данных, что может помешать мне использовать индекс строки моего DataGridView для поиска строки, содержащей значение.

Есть ли способ выбрать мои строки таким образом? Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 25 января 2019

В конце концов мне удалось найти, делая, может быть, какие-то бесполезные вещи, которых я не знаю.вот код:

        private void tbx_champ_Cpt_TextChanged(object sender, EventArgs e)
    {
        if (tbx_champ_Cpt.Text.ToString() == "")
        {
            for (int i = 0; i < dgv_DetailComptes.Rows.Count - 1; i++)
            {
                dgv_DetailComptes.Rows[i].Selected = false;
            }
        }
        else
        {
            tbx_champ_Cpt.SelectionStart = tbx_champ_Cpt.Text.Length;
            tbx_champ_Cpt.Text = tbx_champ_Cpt.Text.ToString().ToUpper();
            DataTable d = (DataTable)dgv_DetailComptes.DataSource;
            String text = tbx_champ_Cpt.Text.ToString();
            DataRow[] row = d.Select("Champ like '%" + text + "%'");
            List<int> listeIndex = new List<int>();
            for (int i = 0; i < dgv_DetailComptes.Rows.Count - 1; i++)
            {
                foreach (DataRow r in row)
                {
                    if (((DataRowView)dgv_DetailComptes.Rows[i].DataBoundItem).Row == r)
                    {
                        dgv_DetailComptes.Rows[i].Selected = true;
                        listeIndex.Add(i);
                    }
                    else if (!listeIndex.Contains(i))
                    {
                        dgv_DetailComptes.Rows[i].Selected = false;
                    }
                }

            }
        }
        if (dgv_DetailComptes.SelectedRows.Count != 0)
        {
        dgv_DetailComptes.FirstDisplayedScrollingRowIndex = dgv_DetailComptes.SelectedRows[0].Index;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...