在DBGRID中动态显示字段问题(100分)

  • 主题发起人 主题发起人 gxetdc
  • 开始时间 开始时间
G

gxetdc

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个TABLE(规定只能用这个,不用Tquery)连着 a.dbf,然后在dbgrid中显示,一般情况下,
dbgrid将显示a.dbf中的所有字段,现在我想在程序中根据需要,有选择的显示某些字段(列),
就是说不要在IDE中设置显示字段的那种.请问怎么做?
 
类似 DBGrid1.Columns[2].Visible := False
 
table1.FieldByName('field1').Visible:=false;

dbgrid1.Columns.Items[0].Visible:=false;
 
给你两个过程,
1、把当前DBGrid中的字段列入一个CheckListBox中,而且如果字段本身显示的打勾,没有显示的不打勾。
procedure GetFieldItem(Var CheckListBox:TCheckListBox;DBGrid:TDBGrid);
var
i:integer;
begin
SetLength(FieldCheck, DBGrid.Columns.Count);
for i:=0 to DBGrid.Columns.Count-1 do
begin
CheckListBox.Items.Add(DBGrid.Columns.Title.Caption);
if DBGrid.Columns.Visible then
begin
CheckListBox.Checked:=True;
FieldCheck:=True;
end
else FieldCheck:=False;
end;
end;

2、当点击CheckListBox中的相对项时,DBGrid中的字段也相应显示或隐藏。
procedure Hide_DisplayField(Var CheckListBox:TCheckListBox;DBGrid:TDBGrid);
begin
if CheckListBox.Checked[CheckListBox.ItemIndex] then
DBGrid.Columns[CheckListBox.ItemIndex].Visible:=True
else DBGrid.Columns[CheckListBox.ItemIndex].Visible:=False;
end;
你也可以把上述两个过程放入一个Form中在Form中设置相应变量参数,
调用时创建Form传入参数,就可以随时调用了。

补充:
FieldCheck(FieldCheck:array of Boolean) 是我记录初始调入字段时,该字段是显示还是隐藏的一个全局数组变量,
是用于恢复默认显示或隐藏功能而用,如不需要可以删除。
还有是,在第一个过程中开始时应多加一句才算完整:CheckListBox.Clear;
否则当多次调用而又没有释放时会出现重复项(因为我是在调用创建,调用后释放的,所以忽略了)。
 
给你两个过程,
1、把当前DBGrid中的字段列入一个CheckListBox中,而且如果字段本身显示的打勾,没有显示的不打勾。
procedure GetFieldItem(Var CheckListBox:TCheckListBox;DBGrid:TDBGrid);
var
i:integer;
begin
SetLength(FieldCheck, DBGrid.Columns.Count);
for i:=0 to DBGrid.Columns.Count-1 do
begin
CheckListBox.Items.Add(DBGrid.Columns.Title.Caption);
if DBGrid.Columns.Visible then
begin
CheckListBox.Checked:=True;
FieldCheck:=True;
end
else FieldCheck:=False;
end;
end;

2、当点击CheckListBox中的相对项时,DBGrid中的字段也相应显示或隐藏。
procedure Hide_DisplayField(Var CheckListBox:TCheckListBox;DBGrid:TDBGrid);
begin
if CheckListBox.Checked[CheckListBox.ItemIndex] then
DBGrid.Columns[CheckListBox.ItemIndex].Visible:=True
else DBGrid.Columns[CheckListBox.ItemIndex].Visible:=False;
end;
你也可以把上述两个过程放入一个Form中在Form中设置相应变量参数,
调用时创建Form传入参数,就可以随时调用了。
他说的很有道理阿,也很经典,所以我重新复制了一下。
请不要给我加分!^_^
 
补充:
FieldCheck(FieldCheck:array of Boolean) 是我记录初始调入字段时,该字段是显示还是隐藏的一个全局数组变量,
是用于恢复默认显示或隐藏功能而用,如不需要可以删除。
还有是,在第一个过程中开始时应多加一句才算完整:CheckListBox.Clear;
否则当多次调用而又没有释放时会出现重复项(因为我是在调用创建,调用后释放的,所以忽略了)。
 
很好很好,感谢各位,特别感谢Jiao_he,我问这个问题的下一步就是想把程序设计成你说的,
没想到你已帮我全解了,免了我翻书动脑之苦。太好了,这分给得不够再说。
 
后退
顶部