Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление пустых строк, в StringGrid 
:(
    Опции темы
MrDmitry
Дата 22.6.2010, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Как организовать цикл по удалению пустых строк в StringGrid?? Или может быть это можно сделать еще проще в компоненте AdvStringGrid? 
PM MAIL   Вверх
Akella
Дата 22.6.2010, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Выполни цикл от конца к началу (от последней строки к нулевой). В цикле выполняй проверку и удаление.
PM MAIL   Вверх
Rennigth
Дата 22.6.2010, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Akella, на сколько помню(могу ошибаться) в StringGrid можно только уменьшить кол-во строк(столцов), так что надо извращаться )))
(п.с. не люблю я StringGrid)


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Frees
Дата 22.6.2010, 12:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Цитата(Rennigth @  22.6.2010,  15:18 Найти цитируемый пост)
StringGrid можно только уменьшить кол-во строк(столцов)

у автора AdvStringGrid у него есть метод RemoveRows - для удаления строк

Добавлено через 1 минуту и 3 секунды
PS
Цитата(Rennigth @  22.6.2010,  15:18 Найти цитируемый пост)
(п.с. не люблю я StringGrid)

а что вместо него любишь?


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Rennigth
Дата 22.6.2010, 12:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Цитата(Frees @  22.6.2010,  12:28 Найти цитируемый пост)
а что вместо него любишь? 

VT или cxGrid если уж совсем суръезные извращения нужны.  Иногда ListView.  smile 


Цитата(Frees @  22.6.2010,  12:28 Найти цитируемый пост)
у автора AdvStringGrid

Цитата(MrDmitry @  22.6.2010,  07:17 Найти цитируемый пост)
Как организовать цикл по удалению пустых строк в StringGrid?? 

 smile 



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
MrDmitry
Дата 23.6.2010, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Цитата(Akella @ 22.6.2010,  09:34)
Выполни цикл от конца к началу (от последней строки к нулевой). В цикле выполняй проверку и удаление.

Цитата

на сколько помню(могу ошибаться) в StringGrid можно только уменьшить кол-во строк(столцов), так что надо извращаться )))
(п.с. не люблю я StringGrid)


Вот вопрос как раз таки и в том как именно извращаца? ))
Просто я думаю может поставить компонент AdvStrinGrid? Как там удалять строки?
PM MAIL   Вверх
DarkProg
Дата 23.6.2010, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Цитата(MrDmitry @  23.6.2010,  07:02 Найти цитируемый пост)
Просто я думаю может поставить компонент AdvStrinGrid? Как там удалять строки? 

Да также, пока никто насколько я знаю другого способа не придумал как действовать по следующему алгоритму(вообще их два я оба напишу, но просто почти не отличаются):
1)идём сначала(или откуда надо) по всем строка таблицы
2)нашли не нужную и тогда организовываем цикл с этого места и до предпоследней строки таблицы( т.е. StringGrid.RowCount-1 или уже до куда надо), в этом цикле мы каждой текущей строке присваиваем значение следующей
3)последнюю строку очищаем и уменьшаем число строк на одну

В результате получите то что хотите

Второй вариант заключается в том чтобы все ненужные строки просто очистить и после того как очистили все строки уже организовать цикл по сдвигу и соответственно уменьшению числа строк

Для данных целей я вам рекомендую использовать цикл с предусловием

Как ещё вариант(вспомнил что как-то такое пробовал, но на малых объёмах) можете нужные строки скопировать в некоторую невидимую таблицу а потом переместить их опять в вашу видимую, но обязательно уменьшив число строк(последние в принципе желательно очищать)


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
MrDmitry
Дата 23.6.2010, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Код

 adv:=0;
      i:=0;
      j:=0;
     While adv<StringGrid1.RowCount do
  begin
   inc(Adv);
   if (StringGrid1.cells[0,adv]='') or (StrToInt(StringGrid1.cells[5,adv])<5)
    then
     begin
      i:=AdvStringGrid1.Row+1;
      inc(j)
      StringGrid1.Cells[0,adv]:=StringGrid1.Cells[0,i];
      StringGrid1.Cells[1,adv]:=StringGrid1.Cells[1,i];
      StringGrid1.Cells[2,adv]:=StringGrid1.Cells[2,i];
      StringGrid1.Cells[3,adv]:=StringGrid1.Cells[3,i];
      StringGrid1.Cells[4,adv]:=StringGrid1.Cells[4,i];
      StringGrid1.Cells[5,adv]:=StringGrid1.Cells[5,i];
      StringGrid1.Cells[6,adv]:=StringGrid1.Cells[6,i];
     end;
    end;
   StringGrid1.RowCount:=StringGrid1.RowCount-j;

вот так заработает? просто сейчас на работе, нет возможности проверить (
PM MAIL   Вверх
rytmix
Дата 23.6.2010, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 2.6.2009

Репутация: нет
Всего: нет



Код

type TMyGrid = class(TCustomGrid);
....
....
....
procedure TForm1.DelRow(Sender: TObject); 
begin 
    TMyGrid(StringGrid1).DeleteRow(StringGrid1.Row);
end;

PM MAIL   Вверх
Mikel
Дата 23.6.2010, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

Репутация: нет
Всего: 2



И как четвертый вариант smile , затереть ненужную строку последней, уменьшив число строк на 1.
Можно не перетаскивать все значения
Код

StringGrid1.Cells[0,adv]:=StringGrid1.Cells[0,i];
...

а воспользоваться 
Код

StringGrid1.Rows[adv].Text:=StringGrid1.Rows[i].Text



--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
Akella
Дата 25.6.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Цитата(Rennigth @  22.6.2010,  12:18 Найти цитируемый пост)
Akella, на сколько помню(могу ошибаться) в StringGrid можно только уменьшить кол-во строк(столцов), так что надо извращаться )))
(п.с. не люблю я StringGrid) 

Да, по идее нужно смещать информацию в гриде, а потом установить нужно значение количества строк


Цитата(MrDmitry @  23.6.2010,  07:02 Найти цитируемый пост)
Просто я думаю может поставить компонент AdvStrinGrid? Как там удалять строки? 


Вроде ж по-русски ответили smile
Цитата(Frees @  22.6.2010,  12:28 Найти цитируемый пост)
у автора AdvStringGrid у него есть метод RemoveRows - для удаления строк


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0832 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.