Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 00:06   #1
kopnei
 
Регистрация: 14.05.2012
Сообщений: 4
Вопрос Поиск фрагмента текста

Есть некоторый набор объектов. Считываю свойства этих объектов (имена и т.д.). Могу значениями этих свойств заполнить массив, listbox, datagridview и т д

Теперь собственно задача. Есть textbox и кнопка. Как сделать, чтобы в имеющихся данных выполнить поиск того, что пользователь введет в textbox по нажатию кнопки.

Например. Ввожу "а". Результатом поиска должно быть:
1 Гайка
2 Шайба
...
kopnei вне форума Ответить с цитированием
Старый 15.05.2012, 09:11   #2
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

как хранятся данные ? какие объекты, как описаны ? поиск должен быть непосредственно среди свойств объектов или в datagrid и listview ?
wm_leviathan вне форума Ответить с цитированием
Старый 15.05.2012, 19:17   #3
kopnei
 
Регистрация: 14.05.2012
Сообщений: 4
По умолчанию

Что касается объектов, то это детали, сборки и т.д. Вообще они хранятся в PLM-системе Оттуда я ивлекаю их имена и типы.
Я храню их в массиве. Само собой, вывести их в любой элемент - не проблема Мне нужно произвести поиск в массиве И то что критериям удовлетворяет, вывести в datagrid
kopnei вне форума Ответить с цитированием
Старый 15.05.2012, 22:06   #4
DimaTs
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 60
По умолчанию

можно к каждой строке применить метод IndexOf. он принимает строку и возвращает индекст, на котором находится эта строка в исходной строке, иначе -1. вам нужны те, которые >1, их и выведете
Как работает
Код:
var mainString = "Hello";
var subString = "ell";
var index = mainString.IndexOf(subString);
в переменной index окажется значение 1, а значит строка походит
вам нужно лишь сделать это для каждой строки массива
DimaTs вне форума Ответить с цитированием
Старый 16.05.2012, 10:13   #5
kopnei
 
Регистрация: 14.05.2012
Сообщений: 4
По умолчанию

DimaTs
Спасибо за совет Уже сделал немного по-другому))) Используя Contains
kopnei вне форума Ответить с цитированием
Старый 16.05.2012, 20:22   #6
kopnei
 
Регистрация: 14.05.2012
Сообщений: 4
По умолчанию

Теперь возникла новая проблема. Вешаю на конпку функцию поиска по datagridview. В цикле просматриваю все строки и ищу фрагмент текста.
Код:
private void button1_Click(object sender, EventArgs e)
        {
           string searchtext = Convert.ToString(textBox1.Text);
           for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                string Name = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
                string ID = Convert.ToString(dataGridView1.Rows[i].Cells[2].Value);
                if ((ID.Contains(searchtext)) || (Name.Contains(searchtext)))
                {
                    
                }
                  else
                {
                    dataGridView1.Rows.RemoveAt(i);
                }
            }
        }
Соответственно если текст не находит, то удаляю строку.
И вроде все работает, но окончательный результат выдает, только если нажать кнопку несколько раз. Т е после одного нажатия остаются строки, неудовлетворяющие поиску.
kopnei вне форума Ответить с цитированием
Старый 28.05.2012, 21:42   #7
DimaTs
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 60
По умолчанию

в коде на самом деле сложно понять что либо

напишите примерно так
Код:
private void button1_Click(object sender, EventArgs e)
        {
           string searchtext = textBox1.Text;
           for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                string Name = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
                string ID = Convert.ToString(dataGridView1.Rows[i].Cells[2].Value);
                if ( !ID.Contains(searchtext) && !Name.Contains(searchtext))
                {
                    dataGridView1.Rows.RemoveAt(i);
                }
            }
        }
и отладчиком пройдитесь, посмотрите что происходит
и вообще, что такое ID у вас?
DimaTs вне форума Ответить с цитированием
Старый 29.05.2012, 14:36   #8
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Цитата:
for (int i = 0; i < dataGridView1.RowCount; i++)
{
string Name = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
string ID = Convert.ToString(dataGridView1.Rows[i].Cells[2].Value);
if ((ID.Contains(searchtext)) || (Name.Contains(searchtext)))
{

}
else
{
dataGridView1.Rows.RemoveAt(i);
}
}
мне как-то стремно от ткого цикла...

вы же удаляете строку у вас пересчитывается dataGridView1.RowCount... у последние записи вы не факт что удалите... думаю причина в этом...

я бы заменил на такую кривульку
Код:
 else
                {
                    dataGridView1.Rows.RemoveAt(i);
                    i--;
                }
Reskov вне форума Ответить с цитированием
Старый 29.05.2012, 19:44   #9
DimaTs
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 60
По умолчанию

для таких дел (изменение обходимой коллекции) еще и итераторы есть
DimaTs вне форума Ответить с цитированием
Старый 30.05.2012, 11:57   #10
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Да и ловить=)
Цитата:
Exception: Collection was modified; enumeration operation may not execute
http://msdn.microsoft.com/ru-ru/library/ttw7t8t6.aspx

Цитата:
Если нужно добавить или удалить элементы исходной коллекции, следует использовать цикл for.
Ps или я что-то не понимаю в вашем ответе...
Reskov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование фрагмента текста ramzes777 Общие вопросы Delphi 2 09.10.2011 18:41
С++|Поиск фрагмента строки Демик Общие вопросы C/C++ 12 14.07.2011 12:11
Поиск фрагмента изображения на картинке banderas.antonio C# (си шарп) 3 07.05.2011 18:45
Поиск фрагмента по Lixtbox'у. Pavarotti Общие вопросы Delphi 15 09.08.2010 12:25
Удаление фрагмента текста Шурик Общие вопросы Delphi 0 31.05.2009 16:11