2014-09-23 100 views
0

我有一個字符串網格,從中我可以刪除列。我定義了一個允許我使用DeleteColumn方法的CustomStringGrid類型。插入列到字符串網格,delphi

這是它的外觀:

TCustomStringGrid = class(TStringGrid) 

[...] 
With tCustomStringGrid(mygrid) do 
DeleteColumn(col) 
end; 

有類似增加一列的東西嗎?我試過InsertColumn,但似乎並不存在。我想在特定的位置添加一列。事實上,如果用戶刪除一列,我有一個撤消按鈕,我想重新插入刪除列(我保持數據在一個數組,所以我可以重新創建列,但我不知道如何插入一個在一個特定位置)。

謝謝!

+0

號您必須設置'ColCount'和轉移中的所有列('TStringGridStrings.Insert'方法有一個明確的異常消息*「無法插入或刪除網格中的行」*)。歡迎來到一個字符串網格地獄:-) – TLama 2014-09-23 10:41:19

+0

天哪> _ <確定感謝您的答案:D – user28470 2014-09-23 10:41:35

回答

1

它不是內置的,但易於仿真,來自HackClass的ColCount = ColCount + 1MoveColumn

type 
    THackGrid=Class(Grids.TCustomGrid) 
    End; 

Procedure InsertColumn(G:TStringGrid;Position:Integer); 
begin 
    if Position<G.ColCount then 
    begin 
     G.ColCount := G.ColCount + 1; 
     THackGrid(g).MoveColumn(G.ColCount - 1,Position); 
    end; 
end; 

procedure TMyForm.Button1Click(Sender: TObject); 
begin 
    InsertColumn(StringGrid1,1); 
end; 
+0

謝謝!簡單的解決方案:D – user28470 2014-09-23 11:02:49

0

THack電網不工作,也許它是確定當兩個COLS是可見的,但總是工作:

Procedure MoveColumn(G:TStringGrid;OldPosition : integer;NewPosition:Integer); 
var 
    i : integer; 
    temp : string; 
    begin 
    for i := 0 to g.rowcount - 1 do 
    begin 
    temp := g.cells[OldPosition,i]; 
    g.cells[OldPosition,i] := g.cells[NewPosition,i]; 
    g.cells[NewPosition,i] := temp; 
    end; 
    end;