if DBGrid1.SelectedField.FieldName = 'iYear' //在指定列离开之后实现另一列显示,但无法显示,不知为何?
then
begin
showmessage('bbb');
dbgrid1.Columns[1].Visible:=true ;//这行无法实现 ,代码写在button内就可以实现
end;
12 个解决方案
#1
触发的事件不对吧?
#2
找到正确触发事件的地方!
#3
用dbgrideh,参考代码
if self.DBGridEh1.SelectedField.FieldName='iYear' then
begin
self.DBGridEh1.FieldColumns['bbb'].Visible:=true
else
self.DBGridEh1.FieldColumns['bbb'].Visible:=false
#4
如果是dbgrid,列隐藏后,index会重新计算,就不会包含隐藏列了
个人认为需要遍历,参考代码如下
个人认为需要遍历,参考代码如下
procedure TForm1.Button13Click(Sender: TObject);
var
i,j:Integer;
begin
if self.DBGrid2.SelectedField.FieldName='iYear'then
begin
i:=self.DBGrid2.Columns.Count;
for j:=0 to i-1 do
begin
if self.DBGrid2.Columns[j].FieldName='bbb' then
begin
self.DBGrid2.Columns[j].Visible:=True;
Break;
end;
end;
end
else
begin
i:=self.DBGrid2.Columns.Count;
for j:=0 to i-1 do
begin
if self.DBGrid2.Columns[j].FieldName='bbb' then
begin
self.DBGrid2.Columns[j].Visible:=False;
Break;
end;
end;
end;
end;
#5
还是不可以!不能显示!
#6
上面已注时是Button13Click按钮内是可以实现的,但就不知为何在DBGrid1ColExit内写代码就不行?
#7
不会吧,我都测试过了
#8
在OnCellClick中也能实现啊,我测试了
#9
谢谢啊,我刚把代码贴过去试了下不行,放在button内就可以
#10
我目的还是要dbgrid1ColExit 内写代码!因为我要判断目前我这个值是否要
显示另外一列,所以要在这一列值输入完整后退出时来判断是否显示下一列(例如美金外币),
在OnCellClick是可以,但不合我的目的,实现不了要求,
显示另外一列,所以要在这一列值输入完整后退出时来判断是否显示下一列(例如美金外币),
在OnCellClick是可以,但不合我的目的,实现不了要求,
#11
我目的还是要dbgrid1ColExit 内写代码!因为我要判断目前我这个值是否要
显示另外一列,所以要在这一列值输入完整后退出时来判断是否显示下一列(例如美金外币),
在OnCellClick是可以,但不合我的目的,实现不了要求,
显示另外一列,所以要在这一列值输入完整后退出时来判断是否显示下一列(例如美金外币),
在OnCellClick是可以,但不合我的目的,实现不了要求,
#12
的确在OnColExit和OnColEnter中实现不了,也没找到原因。
不过如果是实现你的功能,可以在OnKeyPress里写代码处理啊,要求输入完成后回车
不过如果是实现你的功能,可以在OnKeyPress里写代码处理啊,要求输入完成后回车
public
{ Public declarations }
vg_fieldname:string;
.......
procedure TForm1.DBGrid2CellClick(Column: TColumn);
var
i,j:Integer;
begin
self.vg_fieldname:=Column.FieldName;
end;
procedure TForm1.DBGrid2KeyPress(Sender: TObject; var Key: Char);
var
i,j,m,n:Integer;
begin
if Key=#13 then
begin
if self.vg_fieldname='bianhao' then
begin
i:=self.DBGrid2.Columns.Count;
for j:=0 to i-1 do
begin
if self.DBGrid2.Columns[j].FieldName='renwu' then
begin
m:=self.DBGrid2.DataSource.DataSet.RecordCount;
for n:=1 to m do
self.DBGrid2.Columns[j].Visible:=True;
Break;
end;
end;
self.DBGrid2.Refresh;
end
else
begin
i:=self.DBGrid2.Columns.Count;
for j:=0 to i-1 do
begin
if self.DBGrid2.Columns[j].FieldName='renwu' then
begin
self.DBGrid2.Columns[j].Visible:=False;
Break;
end;
end;
self.DBGrid2.Refresh;
end;
end;
end;
#1
触发的事件不对吧?
#2
找到正确触发事件的地方!
#3
用dbgrideh,参考代码
if self.DBGridEh1.SelectedField.FieldName='iYear' then
begin
self.DBGridEh1.FieldColumns['bbb'].Visible:=true
else
self.DBGridEh1.FieldColumns['bbb'].Visible:=false
#4
如果是dbgrid,列隐藏后,index会重新计算,就不会包含隐藏列了
个人认为需要遍历,参考代码如下
个人认为需要遍历,参考代码如下
procedure TForm1.Button13Click(Sender: TObject);
var
i,j:Integer;
begin
if self.DBGrid2.SelectedField.FieldName='iYear'then
begin
i:=self.DBGrid2.Columns.Count;
for j:=0 to i-1 do
begin
if self.DBGrid2.Columns[j].FieldName='bbb' then
begin
self.DBGrid2.Columns[j].Visible:=True;
Break;
end;
end;
end
else
begin
i:=self.DBGrid2.Columns.Count;
for j:=0 to i-1 do
begin
if self.DBGrid2.Columns[j].FieldName='bbb' then
begin
self.DBGrid2.Columns[j].Visible:=False;
Break;
end;
end;
end;
end;
#5
还是不可以!不能显示!
#6
上面已注时是Button13Click按钮内是可以实现的,但就不知为何在DBGrid1ColExit内写代码就不行?
#7
不会吧,我都测试过了
#8
在OnCellClick中也能实现啊,我测试了
#9
谢谢啊,我刚把代码贴过去试了下不行,放在button内就可以
#10
我目的还是要dbgrid1ColExit 内写代码!因为我要判断目前我这个值是否要
显示另外一列,所以要在这一列值输入完整后退出时来判断是否显示下一列(例如美金外币),
在OnCellClick是可以,但不合我的目的,实现不了要求,
显示另外一列,所以要在这一列值输入完整后退出时来判断是否显示下一列(例如美金外币),
在OnCellClick是可以,但不合我的目的,实现不了要求,
#11
我目的还是要dbgrid1ColExit 内写代码!因为我要判断目前我这个值是否要
显示另外一列,所以要在这一列值输入完整后退出时来判断是否显示下一列(例如美金外币),
在OnCellClick是可以,但不合我的目的,实现不了要求,
显示另外一列,所以要在这一列值输入完整后退出时来判断是否显示下一列(例如美金外币),
在OnCellClick是可以,但不合我的目的,实现不了要求,
#12
的确在OnColExit和OnColEnter中实现不了,也没找到原因。
不过如果是实现你的功能,可以在OnKeyPress里写代码处理啊,要求输入完成后回车
不过如果是实现你的功能,可以在OnKeyPress里写代码处理啊,要求输入完成后回车
public
{ Public declarations }
vg_fieldname:string;
.......
procedure TForm1.DBGrid2CellClick(Column: TColumn);
var
i,j:Integer;
begin
self.vg_fieldname:=Column.FieldName;
end;
procedure TForm1.DBGrid2KeyPress(Sender: TObject; var Key: Char);
var
i,j,m,n:Integer;
begin
if Key=#13 then
begin
if self.vg_fieldname='bianhao' then
begin
i:=self.DBGrid2.Columns.Count;
for j:=0 to i-1 do
begin
if self.DBGrid2.Columns[j].FieldName='renwu' then
begin
m:=self.DBGrid2.DataSource.DataSet.RecordCount;
for n:=1 to m do
self.DBGrid2.Columns[j].Visible:=True;
Break;
end;
end;
self.DBGrid2.Refresh;
end
else
begin
i:=self.DBGrid2.Columns.Count;
for j:=0 to i-1 do
begin
if self.DBGrid2.Columns[j].FieldName='renwu' then
begin
self.DBGrid2.Columns[j].Visible:=False;
Break;
end;
end;
self.DBGrid2.Refresh;
end;
end;
end;