powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск в DataGridView
20 сообщений из 20, страница 1 из 1
Поиск в DataGridView
    #35165283
Fernando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем!
Мне нужно организовать поиск по таблице отображаемой в гриде, писал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
   for (int i = 0; i < MyDataSet.info.Rows.Count; i++)
            {
               int txt = nameBindingSource.Find("Name", textBox1.Text);
               nameBindingSource.Position = txt;
               
            }
Если в колонке "Name" искомое значение встречается только один раз, все нормально, в противном случае находит только первое совпадение, а мне нужно чтобы находил все. Подскажите в чем ошибка?
Заранее благодарен.
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35165314
k1ng
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во-первых, цикл здесь не нужен
во вторых, каким образом ты собираешься показать найденные строки?
лучше уж тогда фильтровать таблицу, используя свойство Filter объекта BindingSource

Код: plaintext
1.
nameBindingSource.Filter = "Name=" + textBox1.Text;
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35165440
Fernando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
k1ngкаким образом ты собираешься показать найденные строки?

Мне достаточно просто выделить строки с искомым значением.
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35165461
Fernando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
k1ng
Код: plaintext
1.
nameBindingSource.Filter = "Name=" + textBox1.Text;

Говорит что не может найти колонку с указанным именем.
Или просто выдает пустую строку.
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35165630
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идея:
Код: plaintext
1.
2.
3.
4.
5.
string searchValue = "3";
List<DataGridViewCell> foundCells = new List<DataGridViewCell>();
foreach (DataGridViewRow row in dataGridView1.Rows)
    foreach (DataGridViewCell cell in row.Cells)
        if (cell.Visible && (cell.FormattedValue.ToString().Contains(searchValue)))
            foundCells.Add(cell);
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35167204
Fernando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ
Не совсем понял где задаются условия поиска, т.е. где получить значение textbox'a?
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35167215
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fernando МСУ
Не совсем понял где задаются условия поиска, т.е. где получить значение textbox'a?
При чем тут текстбокс? Условия поиска задаются в searchValue. Тут приведен like-поиск. Можно сделать и точный финд.
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35167245
Fernando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ
При чем тут текстбокс? Условия поиска задаются в searchValue. Тут приведен like-поиск. Можно сделать и точный финд.
Прошу прощенья за глупый вопрос, теперь все понятно, спасибо за идею, буду пробовать.
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35223552
Fernando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Грид пришлось заполнять программно, вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
            SqlDataAdapter sda = new SqlDataAdapter("m.show_log", Main.connect.cs);
            DataSet ds = new DataSet();
            sda.Fill(ds, "m.show_log");
            BindingSource log = new BindingSource();
            log.DataSource = ds;
            log.DataMember = "m.show_log";
            dataGridView1.DataSource = log;
            dataGridView1.Columns[0].Visible = false;
            dataGridView1.Columns[1].HeaderText = "log";
            dataGridView1.Columns[2].HeaderText = "Name";
            dataGridView1.Focus();
Пробовал писать аналогично
Код: plaintext
1.
2.
int txt = log.Find( "Name", textBox1.Text);
            txt = log.Position;
Говорит Свойство 'Name' для DataMember не найдено в DataSource.
Как возможно осуществить поиск в таком случае? Может кто сталкивался?
Спасибо.
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35223804
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в m.show_log есть колонка Name???
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35223899
Fernando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SerP1983а в m.show_log есть колонка Name???
Да, есть.
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35224006
SlavVlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FernandoГрид пришлось заполнять программно, вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
            SqlDataAdapter sda = new SqlDataAdapter("m.show_log", Main.connect.cs);
            DataSet ds = new DataSet();
            sda.Fill(ds, "m.show_log");
            BindingSource log = new BindingSource();
            log.DataSource = ds;
            log.DataMember = "m.show_log";
            dataGridView1.DataSource = log;
            dataGridView1.Columns[0].Visible = false;
            dataGridView1.Columns[1].HeaderText = "log";
            dataGridView1.Columns[2].HeaderText = "Name";
            dataGridView1.Focus();
Пробовал писать аналогично
Код: plaintext
1.
2.
int txt = log.Find( "Name", textBox1.Text);
            txt = log.Position;


Елки - палки....

А зачем вы в таком случае используете BindingSource если у вас уже есть готовый DataSet????

Все делается намного проще!

Код: plaintext
1.
dataGridView1.DataSource =ds.Tables[0];
DataView dv=ds.Tables[0].DefaultView.RowFilter = "Name = " + textBox1.Text;

Теперь в dv содержатся все найденые строки, если такие существуют.
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35224021
SlavVlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlavVlad
Код: plaintext
1.
DataView dv=ds.Tables[0].DefaultView.RowFilter = "Name = " + textBox1.Text;


Sorry. Маленькая поправочка....
Код: plaintext
1.
2.
DataView dv=ds.Tables[0].DefaultView;
dv.RowFilter = "Name = " + textBox1.Text;
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35224218
Fernando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sorry. Маленькая поправочка....
Код: plaintext
1.
2.
DataView dv=ds.Tables[0].DefaultView;
dv.RowFilter = "Name = " + textBox1.Text;
[/quot]
В этом случае получается что в текстбокс вводится имя столбца.
Возникает ошибка "Не удается найти столбец [текст который вводится в текстбокс]."
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35224255
SlavVlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FernandoВ этом случае получается что в текстбокс вводится имя столбца.
Возникает ошибка "Не удается найти столбец [текст который вводится в текстбокс]."

Eто с какого перепугу? Вопервых в текстбокс я ничего в своем примере не вводил, а вовторых если неудается найти столбец, значит его и небыло в DataTable. Вы бы не могли привести пример вышего кода?
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35224427
Fernando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SlavVladEто с какого перепугу? Вопервых в текстбокс я ничего в своем примере не вводил, а вовторых если неудается найти столбец, значит его и небыло в DataTable. Вы бы не могли привести пример вышего кода?
Пробовал писать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
            SqlDataAdapter da = new SqlDataAdapter("m.show_log", cs);
            DataSet ds = new DataSet();
            da.Fill(ds, "adm.show_log");
            BindingSource log = new BindingSource();
            log.DataSource = ds;
            log.DataMember = "adm.show_log";
            dataGridView1.DataSource = log;
            dataGridView1.Columns[0].Visible = false;
            dataGridView1.Columns[1].HeaderText = "log";
            dataGridView1.Columns[2].HeaderText = "Name";
            dataGridView1.Focus();
            dataGridView1.DataSource = ds.Tables[0];
            DataView dv = ds.Tables[0].DefaultView;
            dv.RowFilter = "Name = " + textBox1.Text;
Пробовал писать вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
            SqlDataAdapter da = new SqlDataAdapter("select * from m.user_log", cs);
            sb = new System.Data.SqlClient.SqlCommandBuilder(da);
            da.Fill(ds,"0");
            this.dataGridView1.DataSource = ds.Tables["0"].DefaultView;
            dataGridView1.DataSource = ds.Tables[0];
            DataView dv = dts.Tables[0].DefaultView;
            dv.RowFilter = "Name = " + textBox1.Text;
В обоих случаях одна и таже ошибка:Не удается найти столбец [123]
123-это текст который я вводил в TextBox
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35224558
Fernando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SlavVladВопервых в текстбокс я ничего в своем примере не вводил, а вовторых если неудается найти столбец, значит его и небыло в DataTable. Вы бы не могли привести пример вышего кода?
TextBox он и нужен для того чтобы пользователь мог вводить то что ищет, а ошибка эта возникает по тому что действительно нет такого столбца(имя которого совпадает с искомым значением), есть столбец Name, по которому нужно осуществить поиск.
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35224583
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так?
Код: plaintext
1.
dv.RowFilter = string.Format("Name = '{0}'", textBox1.Text);
...
Рейтинг: 0 / 0
Поиск в DataGridView
    #35224611
Fernando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SerP1983А так?
Код: plaintext
1.
dv.RowFilter = string.Format("Name = '{0}'", textBox1.Text);

А так то что надо!!! Спасибо большое всем за помощь.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Поиск в DataGridView
    #38676700
Red_Sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного археологии

авторnameBindingSource.Filter = "Name=" + textBox1.Text; не работало потому что textBox1.Text не был заключен в одинарные кавычки
пример использования BindingSource.Filter

PS надеюсь что это сэкономит кому то время
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск в DataGridView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]