![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удалить строку или столбец из 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]Удалить данные из столбца/строки или сам/саму столбец/строку?