首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按DBGrid列标题执行IF

按DBGrid列标题执行IF
EN

Stack Overflow用户
提问于 2021-10-18 19:52:16
回答 1查看 274关注 0票数 0

我想为每一列创建一个不同的弹出窗口。由于列顺序可以更改,所以我需要通过列标题来标识它,但我没有找到解决方案。

这是我成功应用的两种方法。

代码语言:javascript
复制
    procedure TForm2.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
var
  ACol, ARow: Integer;
begin
  if Y < DBGrid1.DefaultRowHeight then
  begin
    (Sender as TDBGrid).MouseToCell(X, Y, ACol, ARow);
    if Button = mbRight then
    begin
    if DBGrid1.SelectedColumn.FieldName = 'Title1' then
      BEGIN
        ShowMessage('Title1'+ IntToStr(ACol));
      end;
 
      if DBGrid1.SelectedColumn.FieldName = 'Title2' then
      BEGIN
        ShowMessage('Title2'+ IntToStr(ACol));
      end;    
end;
end;
end; 

它不起作用,因为它通过id而不是名称来标识列,因此如果用户更改列顺序,它将无法正常工作。

此外,此故障代码

代码语言:javascript
复制
procedure TForm2.Button2Click(Sender: TObject);
var
  i: Integer;
  CaptionText: string;
begin
  for i := 0 to DBGrid1.Columns.Count - 1 do
  case DBGrid1.Columns[i].FieldName of
    'TEST':
      begin
        DBGrid1.Columns[i].Title.Caption := 'REPLACE TEXT';
      end;
  end;  
end;   

它只需在一次单击中替换所有标题。

我想要做的是创建一个IF,它可以处理右击列标题:

如果选定的列名= ' test‘,则开始显示消息(’您已经选择了测试列‘);

我将使用if创建动态弹出以应用过滤器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-18 20:22:52

下面的代码是TDBGrid的MouseMove事件的事件处理程序,它显示鼠标在窗体标题上的列标题的标题。

代码语言:javascript
复制
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  Col,
  Row : Integer;
begin
  Col := DBGrid1.MouseCoord(X, Y).X;
  Row := DBGrid1.MouseCoord(X, Y).Y;
  if (dgIndicator in DBGrid1.Options) then
    Dec(Col);
  if (Col >= 0) and (Col < DBGrid1.Columns.Count) then
    Caption := DBGrid1.Columns[Col].Title.Caption
  else
    Caption := '';
end;

请注意,

代码语言:javascript
复制
if (dgIndicator in DBGrid1.Options) then
    Dec(Col);

是调整行为,以便在关闭dgIndicator选项时进行正确操作。

显然,而不是

代码语言:javascript
复制
Caption := DBGrid1.Columns[Col].Title.Caption

你可以

代码语言:javascript
复制
MenuItem.Caption := DBGrid1.Columns[Col].Title.Caption

若要将列标题复制到菜单项的标题,请执行以下操作。我认为您可能不需要对Title.Caption的值与任何硬编码常量进行比较,但显然这是您的选择。

顺便说一句,如果您更愿意访问为列的内容提供显示值的dataset字段的名称,则可以读取该列的FieldName属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69621841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档