下面一些代码你自己改改,它是生成一个文件来显示字段的,当dbgrid所在窗体启动时,从文件引入显示dbgrid字段 //引入文件显示DBGrid字段,在dbgrid所在的窗体的formcreate事件 Path := ExtractFilePath(Application.ExeName); if FileExists(Path + 'IsVisible.Txt') then begin CheckList := TStringList.Create; try CheckList.LoadFromFile(Path + 'IsVisible.Txt'); for I := 0 to CheckList.Count - 1 do begin if I > dbgrid1.Columns.Count - 1 then Break; if CheckList.Values[CheckList.Names[I]] = '0' then dbgrid1.Columns[I].Visible := False else dbgrid1.Columns[I].Visible := True; end; finally CheckList.Free; end;//引入文件看哪些字段需要选择,查询窗体的formactivate事件,用checkbox控件来选择字段显示 chkbox.Clear; for I := 0 to form4.DBGrid1.Columns.Count - 1 do begin chkbox.Items.Add(form4.DBGrid1.Columns[I].Title.Caption); if form4.DBGrid1.Columns[I].Visible then chkbox.Checked[I] := True else chkbox.Checked[I] := False; end;//选择字段且保存设置到文件,查询窗体的确定按钮 for I := 0 to form4.dbgrid1.Columns.Count - 1 do form4.dbgrid1.Columns[I].Visible := chkbox.Checked[I]; CheckList := TStringList.Create; Path := ExtractFilePath(Application.ExeName); try for I := 0 to chkbox.Items.Count - 1 do begin if chkbox.Checked[I] then begin tmpStr := chkbox.Items[I] + '=1' ; if I<>0 then check:=true; end else tmpStr := chkbox.Items[I] + '=0'; CheckList.Add(tmpStr); end; CheckList.SaveToFile(Path + 'IsVisible.Txt'); finally CheckList.Free; end;
--------------------------------
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, Grids, DBGrids;type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
PopupMenu1: TPopupMenu;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ItemClick(Sender :TObject);
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
i :Integer;
it :TMenuItem;
begin
for i:=0 to DBGrid1.Columns.Count-1 do
begin
it := TMenuItem.Create(nil);
it.Caption := DBGrid1.Columns.Items[i].Title.Caption;
it.OnClick := ItemCLick;
it.Checked := True;
PopupMenu1.Items.Add(it);
end;
end;procedure TForm1.ItemClick(Sender: TObject);
var
i :Integer;
begin
if TMenuItem(Sender).Checked then
begin
ShowMessage( TMenuItem(Sender).Caption);
//修改此处!
end;
end;end.
好像不行
dbgrid1.Columns.Items[3].Visible:=true;//取消隐藏
//这样不行吗.....
dbgrid1.Columns.Items[a].Visible:=false;
dbgrid1.Columns.Items[a].Visible:=true;
其中a为某一个数,0开始
像这种方法:select 列1,列6 from table)太繁琐,毕竟不可能每个dbgrideh1都要设置呀。
dbgrid1.Columns.Items[3].Visible:=true;//取消隐藏
//这样不行吗....
就用這個唄,
哪裡不徹底?
//引入文件显示DBGrid字段,在dbgrid所在的窗体的formcreate事件
Path := ExtractFilePath(Application.ExeName);
if FileExists(Path + 'IsVisible.Txt') then
begin
CheckList := TStringList.Create;
try
CheckList.LoadFromFile(Path + 'IsVisible.Txt');
for I := 0 to CheckList.Count - 1 do
begin
if I > dbgrid1.Columns.Count - 1 then Break;
if CheckList.Values[CheckList.Names[I]] = '0' then
dbgrid1.Columns[I].Visible := False
else
dbgrid1.Columns[I].Visible := True;
end;
finally
CheckList.Free;
end;//引入文件看哪些字段需要选择,查询窗体的formactivate事件,用checkbox控件来选择字段显示
chkbox.Clear;
for I := 0 to form4.DBGrid1.Columns.Count - 1 do
begin
chkbox.Items.Add(form4.DBGrid1.Columns[I].Title.Caption);
if form4.DBGrid1.Columns[I].Visible then
chkbox.Checked[I] := True
else
chkbox.Checked[I] := False;
end;//选择字段且保存设置到文件,查询窗体的确定按钮
for I := 0 to form4.dbgrid1.Columns.Count - 1 do
form4.dbgrid1.Columns[I].Visible := chkbox.Checked[I];
CheckList := TStringList.Create;
Path := ExtractFilePath(Application.ExeName);
try
for I := 0 to chkbox.Items.Count - 1 do
begin
if chkbox.Checked[I] then
begin
tmpStr := chkbox.Items[I] + '=1' ;
if I<>0 then
check:=true;
end
else
tmpStr := chkbox.Items[I] + '=0';
CheckList.Add(tmpStr);
end;
CheckList.SaveToFile(Path + 'IsVisible.Txt');
finally
CheckList.Free;
end;
其它的控件也可以自己写代码的