Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удалить строку или столбец из TStringGrid [D5, D6, D7, Win2k, WinXP]


DDDeN ©   (2007-10-24 10:07:00) 

Собственно сабж. Как я понял, в данном компоненте отсутствуют встроенные методы реализации удаления определенной строки или столбца. В таблице присутствуют зафиксированный столбец и строка и примерно около 3000 строк с информацией.


Германн   (2007-10-25 13:09:00) [1]


> DDDeN   (25.10.07 06:36) [12]
>
> Нашел информацию. Методы MoveColumn и MoveRow имеются у
> TCustomGrid. Чтобы воспользоваться этими методами достаточно
> сделать следующее:
>

Это намного больше чем достаточно, многое в приведенном коде совсем не нужно. Я ж сказал
> на раз-два

т.е. всего две строчки.
С домашним заданием справился, но пока коряво. :(


DDDeN   (2007-10-25 06:36:00) [2]

Нашел информацию. Методы MoveColumn и MoveRow имеются у TCustomGrid. Чтобы воспользоваться этими методами достаточно сделать следующее:

Объявим их как public

type
 TStringGridX = class (TStringGrid)
 public
   procedure MoveColumn(FromIndex, ToIndex: Longint);
   procedure MoveRow(FromIndex, ToIndex: Longint);
 end;

И вызываем метод предка:

procedure TStringGridX.MoveColumn(FromIndex, ToIndex: Integer);
begin
 inherited;
end;

procedure TStringGridX.MoveRow(FromIndex, ToIndex: Integer);
begin
 inherited;
end;

Все! Можно юзать :-)

procedure TForm1.Button1Click(Sender: TObject);
begin
 TStringGridX(StringGrid1).MoveColumn(1, 3);
end;


Германн   (2007-10-24 20:10:00) [3]


> DDDeN   (24.10.07 17:08) [10]
>
> Эти методы есть только у предка TStringGrid.
>

Раз у предка есть, значит и у потомка тоже. А доступ к секции protectedполучается на раз-два. :-)


DDDeN   (2007-10-24 17:08:00) [4]

Эти методы есть только у предка TStringGrid.


Jeer   (2007-10-24 14:09:00) [5]


> Jeer ©   (24.10.07 12:26) [7]


А это домашнее задание от тебя:))

Я предпочитаю, чтобы сначала на простом они поняли, а потом можно уже пользовать классом TBuhgalteria.


Германн   (2007-10-24 13:50:00) [6]


> Jeer ©   (24.10.07 11:26) [5]

А процедуру MoveRow почему бы не использовать?


Jeer   (2007-10-24 12:26:00) [7]


> Grid.Rows[j].Clear;


Лишнее.


DDDeN   (2007-10-24 11:52:00) [8]

Готово! Всем спасибо :-)

procedure TMainForm.DeleteButtonClick(Sender: TObject);
var
 i, j: Integer;
begin
 j := Grid.Row;
 Grid.Rows[j].Clear;
 for i := j to Grid.RowCount - 2 do
   Grid.Rows[i].Assign(Grid.Rows[i + 1]);
 Grid.RowCount := Grid.RowCount - 1;
end;

Надо бы еще проверить на то, что мы не удаляем зафиксированную строку или столбец.


Jeer   (2007-10-24 11:26:00) [9]

в цикле
*.Rows[i].Assign(Rows[i+1]);
затем
*.RowCount:= RowCount-1;

аналогично для Cols


DDDeN   (2007-10-24 11:20:00) [10]

Надо :-)
Есть куча строк, скажем, около 3 тысяч. И столбцов около пятидесяти. Надо удалить определенную строку или столбец.


Palladin   (2007-10-24 11:18:00) [11]

То есть если они будут без данных, то удалять не надо? :)


DDDeN   (2007-10-24 11:15:00) [12]

Надо удалить строку/столбец с данными.


megabyte   (2007-10-24 11:09:00) [13]

Удалить данные из столбца/строки или сам/саму столбец/строку?


Наверх

Титульная страница Поиск, карта сайта Написать письмо