Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 55

Удаление строк StringGrid

23.01.2015, 01:36. Показов 3068. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание: нужно вывести приборы с их параметрами(не суть, какие) и сравнить их с параметрами, вводимыми пользователем. Есть кнопка Найти подходящий прибор(при нажатии, из таблицы удаляются все приборы, не подходящие требованиям) и кнопка отмена, которая возвращает таблицу в исходное состояние

В общем, вроде как сравнение я осуществил, но с удалением проблемы, то удаляет не то, то не полностью, вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void __fastcall TMyLab::runClick(TObject *Sender) {
    UnicodeString s = Edit1->Text;    //Имя прибора
    int upr,u,p;
    TryStrToInt(Edit2->Text, upr);   
    TryStrToInt(Edit3->Text, u);
    TryStrToInt(Edit4->Text, p);
    if (!upr || !u || !p) {
        Status->SimpleText=Format(L"Введено некорректное или недопустимое значение...",
            ARRAYOFCONST((Edit1->Text)));
 
        Application->MessageBoxW(Status->SimpleText.w_str(), L"Лабораторная работа №3",
                    MB_OK|MB_ICONERROR);
        Edit1->SetFocus();
        return;
    }
    else{
        for (int i = 1; i < tabl->RowCount; i++) {
            if (((TStringGrid*)tabl)->Cells[1][i] != s || (StrToInt(tabl->Cells[2][i]) > upr)
                        || (StrToInt(tabl->Cells[3][i]) != u) ||
                                (StrToInt(tabl->Cells[4][i]) < p)){
                tabl->Rows[i] = tabl->Rows[i+1];
                tabl->RowCount--;
            }
            else
                continue;
        }
    }
}
И насчет кнопки "Отмена". Я так понимаю, нам нужно сохранить исходную таблицу в создаваемый объект? Как лучше это сделать?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2015, 01:36
Ответы с готовыми решениями:

Удаление пустых строк в StringGrid
Подскажите пожалуйста каким образом удалить все пустые строки в StringGrid? Заранее благодарен.

Удаление строк StringGrid со вспомогательной таблицы
Здравствуйте! Нужно помощь! Подскажите как можно удалить стоку с вспомогательной таблицы через StringGrid! Добавляю так: ...

StringGrid удаление строк
Всем привет, помогите исправить глюк при удалении. Вообщем, я удаляю строку с одинаковыми данными, которые находятся в первой колонке...

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33406 / 21516 / 8236
Регистрация: 22.10.2011
Сообщений: 36,917
Записей в блоге: 12
23.01.2015, 01:50
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Не надо заниматься самодеятельностью, открой метод DeleteRow у StringGrid-а, и используй его для удаления строки. Вот тут есть пример: Удаление в StringGrid (особое внимание обрати на направление удаления !!!)

А для того, чтобы работала "Отмена" проще всего будет сохранить состояние StringGrid-а в StringList, и потом, при необходимости, восстановить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
TStringList *L; // глобально, создание/удаление на твоей совести :)
 
void SaveGrid(TStringGrid *grid)
{
    L->Clear();
    for(int i = 0; i < grid->RowCount; i++)
    {
        L->Add(grid->Rows[i]->CommaText);
    }
}
 
void RestoreGrid(TStringGrid *grid)
{
    grid->RowCount = L->Count;
    for(int i = 0; i < L->Count; i++)
    {
        grid->Rows[i]->CommaText = L->Strings[i];
    }
}
1
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 55
23.01.2015, 02:13  [ТС]
volvo, сделал, как в примере, но все равно как-то не так)
Первая картинка - исходная таблица, на второй введенные значения и результат
C++
1
2
3
4
5
6
for (int i = 1; i < tabl->RowCount; i++) {
            if (((TStringGrid*)tabl)->Cells[1][i] != s || (StrToInt(tabl->Cells[2][i]) > upr)
                        || (StrToInt(tabl->Cells[3][i]) != u) ||
                                (StrToInt(tabl->Cells[4][i]) < p)){
                static_cast<MyGrid*>(tabl)->DeleteRow(i);
}


А насчёт Отмены, я допер просто в временный файл сохранять, хотя у вас способ проще, спасибо.
Миниатюры
Удаление строк StringGrid   Удаление строк StringGrid  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33406 / 21516 / 8236
Регистрация: 22.10.2011
Сообщений: 36,917
Записей в блоге: 12
23.01.2015, 02:21
Цитата Сообщение от ВАваф Посмотреть сообщение
сделал, как в примере
Это не как в примере. Я выше написал, на что обратить внимание, повторять не буду... Ну, и к тому же, почему условия разделены OR-ами? Тебе нужно чтобы выполнилось хотя бы одно из них, или все вместе?
1
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 55
23.01.2015, 02:38  [ТС]
volvo, если хоть одно из них не выполняется, я удаляю строку

Добавлено через 11 минут
volvo, Я разобрался, спасибо большое!
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33406 / 21516 / 8236
Регистрация: 22.10.2011
Сообщений: 36,917
Записей в блоге: 12
23.01.2015, 02:43
Я же написал, за порядком следи: цикл должен быть от конца к началу!!!

C++
1
2
3
4
5
6
7
8
    for (int i = tabl->RowCount - 1; i >= tabl->FixedRows; i--)
    {
        if (((TStringGrid*)tabl)->Cells[1][i] != s || (StrToInt(tabl->Cells[2][i]) > upr) ||
            (StrToInt(tabl->Cells[3][i]) != u) || (StrToInt(tabl->Cells[4][i]) < p))
        {
            static_cast<MyGrid*>(tabl)->DeleteRow(i);
        }
    }
прекрасно удаляет, как и требовалось...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2015, 02:43
Помогаю со студенческими работами здесь

Удаление строк StringGrid
Условие: нужно удалять выбранную строку. Можно удалять все строки, кроме первой-фиксированной var n:integer; begin for...

Динамическое удаление строк из StringGrid
Добрый день. подскажите как можно удалить сразу несколько выделенных строк в stringrid. Одну строку удаляю ...

StringGrid и radiobutton, удаление строк
Добрый день! прошу помощи : у меня есть StringGrid в котором содержатся данные, и есть 3 radiobutton. проблема в следующем, мне надо с...

StringGrid: сравнение и удаление строк
Добрый день. Гружу в stringGrid данные. Создано 6 колонок. Первая строка (FixedRows) название колонок. Необходимо сравнивать содержимое...

Удаление пустых строк в StringGrid
Доброго времени суток! Прошу помочь решить мою проблемку. Имеется stringgrid, какие-то строки заполнены, а какие- то пустые. Задача:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru