2014-09-23 86 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;