| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > StringGrid |
| Автор: LenaKi 5.12.2005, 12:01 | ||
| Нашла на форуме код позволяющий убрать не нужное изStringGrid. Где ошибка у меня? Подскажите, как правильно удалить в цикле названия из первой колонки StringGrid? Чтобы было понятнее, вылаживаю рисунок. Пытаюсь оставить в StringGrid только то, что мне нужно. Если разкомментировать код получаю ерунду.
|
| Автор: _hunter 5.12.2005, 12:12 |
| что-то мне кажется, что ты перепутала колонки и столбцы ( или структуру таблицы ): как в одной ячейке ( и в одном столбце ) может быть и улица и дом и тип? + убери из тестового случая все лишнее: ты удаляеш строки? зачем тогда в коде руссификация? |
| Автор: 111111 5.12.2005, 12:23 |
| Изв.Компилятора под рукой нет. Попробуй на оборот for (int i=0; i<StringGrid1->RowCount-1; i++) |
| Автор: _hunter 5.12.2005, 12:39 |
| наоборот как раз строки удалять нельзя -- вся индексация гахнется... |
| Автор: LenaKi 5.12.2005, 13:32 |
| Не совсем поняла, где у меня не правильно hunter?. Вот, например, прилагаю рисунок. В данном StringGrid я, например, хочу убрать все значения из второй колонки, где есть 0 и оставить то, что выделено розовым цветом предварительно руссофицировав. Как точно организовать код? Нули убираются без проблем: if(Form1->StringGrid1->Cells[1][i] == "0") ((TPublicGrid*)Form1->StringGrid1)->DeleteRow(i); Потом начинаю убирать лишние строки по одной и на каком-то этапе вдруг получаю ерунду. |
| Автор: _hunter 5.12.2005, 13:44 |
| тогда ( если нули убираются ) я не понял в чем проблема... и на каком этапе ( и в чем это выражается )? -- отладчиком по коду пройди... |
| Автор: Gala 5.12.2005, 14:14 | ||
вот моя процедура удаления строки
|
| Автор: LenaKi 5.12.2005, 14:48 | ||
//Код разкоментирован результат на рисунке ниже с номером 1
Опишу как я получаю StringGrid. Может в этом проблема. StringGrid формируется при щелчках мыши динамически. Каждый раз в нем разное кол-во строк с английскими именами в первой колонке. Я хочу создать универсальный код убирающий эти названия и оставляющий только три нужных мне. Я пишу общий код убирающий все ненужные мне названия, благо я знаю все их имена. Убираю простым перечислением в if. Проблема такая: я разкоментировала код выше, на рисунке получила результат с номером 1. Далее в коде сформировался новый StringGrid. У него есть в первой колонке те же имена что и у предыдущего (имена те же, но их меньше). Воздействую тем же кодом, получаю ерунду рисунок 2. Если весь код закомментировать, то вижу что оба StringGrid-а сформировались нормально (рисунок 3), вот только мой универсальный код не убирает строки так, как я это себе представляю в обоих случаях. Еще раз подробнее. Допустим, есть StringGrid c 20 строками. Я хочу оставить только три строки с нужными мне названиями. Все получилось. Далее сформировался новый StringGrid в нем, к примеру, 10 строк с названиями, которые все есть и в первом 20-ти строковом. Среди них в обязательном порядке есть и мои нужные три строки (такие же имена как и в 20-строковом) и остальные не нужные (тоже с именами как в 20-и строковом). В конечном итоге я хочу в обеих StringGrid-ах отставить нужные мне три строки. |
| Автор: LenaKi 5.12.2005, 15:23 | ||
Вроде заработало. Надо цикл разбить на два. Сначала удалить строки с нулями во второй колонке, а затем во вновь получившемся StringGrida-е удалять не нужные строки из первой. Почему нельзя объединить удаление нулей из втрой колонки и строк с не нужными именами из первой колонки в одном цикле я пока не поняла.
|
| Автор: _hunter 5.12.2005, 15:51 |
| тут проблема в том, что _теряются_ проверки: после удаления строки дальше проверять не нужно ( continue поставить ) а, вообще, эту проверку ( по крайней мере на имена ( STR_STD2, NAM_STR2, ... ) ) лучше вынести в отдельную функцию, в которую передавать строку и список строк для удаления -- и читатся код будет легче и понятнее будет... |
| Автор: LenaKi 5.12.2005, 17:09 |
| Cпасибо, _hunter ! |