powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск в гриде
4 сообщений из 4, страница 1 из 1
Поиск в гриде
    #32545331
Alex798
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос такой:
Как при наборе значения в TextBox осуществить поиск соответствующей записи в гриде?
Заранее спасибо.
...
Рейтинг: 0 / 0
Поиск в гриде
    #32545474
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Как при наборе значения в TextBox осуществить поиск соответствующей записи в гриде?


Поиск или фильтровать грид?
По каким полям то хоть ищем по PK или по любому полю (группе полей)?
...
Рейтинг: 0 / 0
Поиск в гриде
    #32545649
Sergey Pikhulya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Поиск в гриде
    #32546218
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привожу ответ поссылке данную Sergey Pikhulya (я привожу только код по теме)

Вопрос:
Как в DataGrid'e сделать текущей строку, по значению любого ее столбца в независимости от сортировки(источником данных для DataGrid'a является DataTable)?

Ответ:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
//Обработчик события TextBox.TextChanged
 void OnTextBoxTextChanged(object sender, EventArgs e)
 {
  CurrencyManager currencyManager = (CurrencyManager)BindingContext[dgMain.DataSource, dgMain.DataMember];
  DataView dataView = (DataView)currencyManager.List;
  string query = string.Format("{0} LIKE '%{1}%'", COL_NAME, tbMask.Text);
  DataRow[] rows = dataTable.Select(query, dataView.Sort);
  if (rows.Length >  0 )
  {
   int index = Array.IndexOf(dataTable.Select(dataView.RowFilter, dataView.Sort), rows[ 0 ]);
   currencyManager.Position = index;
  }
 }

где COL_NAME - это название вашего столбца

В дополнение или в альтернативу варианту Сергея. Другой более быстрый и простой вариант:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
const string COL_NAME = "YourColumnName";
string findText = tbMask.Text;
CurrencyManager cm = (CurrencyManager)BindingContext[dgMain.DataSource, dgMain.DataMember];
DataView dv = (DataView) cm.List;

for(int i =  0 ; i < dv.Count; ++i) 
{ 
	string str = (string) dv[i].Row[COL_NAME];
	int indexof = str.IndexOf(findText);  // Точно также как и в первом варианте реализуем LIKE
	if(indexof >=  0 )  // Если на вхождение (LIKE) проверять не надо, то просто сравниваем if (str == findText)
	{
		cm.Position = i;
		break;
	}
}

Минус - этого варианта то что не используется Expression выражения, что в некоторых случаех сужает область применения.

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


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