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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2010, 11:06   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
Вопрос Удаление пустых строк в StringGrid с "поднятием" остальных

Возникла необходимость в удалении пустых строк в StringGrid, но чтобы оставшиеся "поднялись" наверх, т.е. как бы сдвинулись со своих позиций на -1 значение. Вот так я пробую:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 row: integer;
begin
 for row:=0 to Form1.StringGrid1.RowCount - 1 do
 begin
  if Form1.StringGrid1.Cells[0,row] = '' then
  begin
   Form1.StringGrid1.Rows.Delete(row);
  end;
 end;
end;
однако ругается на выделенную строку и говорит, что "[Error] Unit1.pas(509): '[' expected but '.' found" Хотя вроде нигде скобки не ставил...
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.10.2010, 11:32   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Подсмотрел в инете изящное решение:
Цитата:
В классе TCustomGrid очень много вкусного находится в секции protected, и, соответственно видно только прямому наследнику - есть один вариант, который часто применяется для открытия защищённых методов:
Код:
type
  THackGrid = class(TStringGrid);

procedure TForm1.Button1Click(Sender: TObject); 
begi
  THackGrid(StringGrid1).DeleteRow(StringGrid1.Row);
end;
mihali4 вне форума Ответить с цитированием
Старый 29.10.2010, 13:19   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Этот код удаляет и пустые и непустые строки в таблице после каждого нажатия на кнопку. Мне же надо, чтобы только пустые удалялись, а остальные перемещались к верху таблицы.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.10.2010, 13:35   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну дык в цикле пройдить
проверь if trim(StringGrid.Rows[i])='' then удалим.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.10.2010, 13:41   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 row: integer;
begin
 for row:=0 to Form1.StringGrid1.RowCount - 1 do
 begin
  if Trim(StringGrid1.Rows[row]) = '' then
  begin
   THackGrid(StringGrid1).DeleteRow(StringGrid1.Row);
  end;
 end;
?
Пишет: "[Error] Unit1.pas(632): There is no overloaded version of 'Trim' that can be called with these arguments"
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.10.2010, 13:50   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Пардонте:
Код:
if Trim(StringGrid1.Rows[row].Text) = '' then
Забыл...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.10.2010, 15:01   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Все равно после нажатия на кнопку удаляет все строки))
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.10.2010, 15:22   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну елы-палы... Чуть-чуть внимательности побольше
Код:
var
 row: integer;
begin
 for row:=1 to Form1.StringGrid1.RowCount - 1 do //наверняка шапка, которую обрабатывать не нужно ?
 begin
  if Trim(StringGrid1.Rows[row].Text) = '' then
  THackGrid(StringGrid1).DeleteRow(row);
 end;
 end;
mihali4 вне форума Ответить с цитированием
Старый 29.10.2010, 16:55   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

У меня нет в таблице шапки . Щас вроде правильно работает, тока почему то одну непустую, первую, строку все равно удаляет. Остальные вроде не трогает. Если я гружу в StringGrid данные, потом нажимаю на кнопку, они расставляются в обратном порядке и первая строка становится пустой
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.10.2010, 17:46   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Убрал шапку.
Все работает нормально. Button8 заполняет StringGrid, потом я вручную очищаю любую строку и Button7 ее (и только ее) удаляет. Вот код:
Код:
procedure TForm1.Button7Click(Sender: TObject);
var
 row: integer;
begin
 for row:=0 to Form1.StringGrid1.RowCount - 1 do
 begin
  if Trim(StringGrid1.Rows[row].Text) = '' then
  THackGrid(StringGrid1).DeleteRow(row);
 end;
 end;

procedure TForm1.Button8Click(Sender: TObject);
var i,j: integer;
begin
for i:=1 to StringGrid1.ColCount-1 do
for j:=0 to StringGrid1.RowCount-1 do
StringGrid1.Cells[i,j]:=IntToStr(i)+IntToStr(j);
end;
Первый фиксированный столбец оставил.
Убрал и его - все нормально...

Последний раз редактировалось mihali4; 29.10.2010 в 17:48.
mihali4 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление пустых строк в таблице Semen90 Microsoft Office Word 24 14.07.2022 12:28
Удаление пустых и повторяющихся строк Marsel737 Общие вопросы Delphi 5 03.12.2009 00:58
Удаление "повторяющихся" строк zzz007 Microsoft Office Excel 2 03.09.2009 05:01
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Считывание строк из файла. перемещение по строкам "веред"-"назад" Larkin. Помощь студентам 2 15.06.2009 17:58