美文网首页
DBGrid移动列之后找到指定FieldName的列号

DBGrid移动列之后找到指定FieldName的列号

作者: 志城 | 来源:发表于2018-06-06 16:38 被阅读10次

说明

  • 这是两列需要在移动之后确定新的列号
  • 定义DepositIndexViewDetailIndex
  • 在FromCreate中给DepositIndexViewDetailIndex赋初值
  • ColumnMoved中重新设置DepositIndexViewDetailIndex

方式1:根据FromIndex和ToIndex以及DepositIndex和ViewDetailIndex之间的关系来重新设置DepositIndex和ViewDetailIndex

  • (不推荐-当需要处理的列过多的时候,这样的写法会很麻烦,虽然可以通过数组来处理)
procedure TFormSiteReportMain.RzDBGrid1ColumnMoved(Sender: TObject; FromIndex,
  ToIndex: Integer);
begin
  inherited;
  if FromIndex = DepositIndex then
  begin
      DepositIndex := ToIndex;
      if (FromIndex < ViewDetailIndex) and (ViewDetailIndex <= ToIndex)  then
      begin
        ViewDetailIndex := ViewDetailIndex - 1;
      end
      else if (FromIndex > ViewDetailIndex) and (ViewDetailIndex >= ToIndex) then
      begin
        ViewDetailIndex := ViewDetailIndex + 1;
      end;
  end
  else if FromIndex = ViewDetailIndex then
  begin
      ViewDetailIndex := ToIndex;
      if (FromIndex < DepositIndex) and (DepositIndex <= ToIndex)  then
      begin
        DepositIndex := DepositIndex - 1;
      end
      else if (FromIndex > DepositIndex) and (DepositIndex >= ToIndex) then
      begin
        DepositIndex := DepositIndex + 1;
      end;
  end;

end;

方式2(推荐):根据我们的FieldName来获取对应的列号

procedure TFormSiteReportMain.RzDBGrid1ColumnMoved(Sender: TObject; FromIndex,
  ToIndex: Integer);
var
  i: Integer;
  tmpField: string;
begin
  inherited;
  for I := 0 to RzDBGrid1.Columns.Count - 1 do
  begin
    tmpField := RzDBGrid1.Columns[i].FieldName;
    if tmpField = 'Deposit' then
      DepositIndex := i
    else if tmpField = 'ViewDetail' then
      ViewDetailIndex := i;
  end;
end;

将指定行的鼠标手势变为手指

procedure TFormSiteReportMain.RzDBGrid1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var
  i: Integer;
  coords: TGridCoord; // 这个结构体中x是列,y是行
begin
  inherited;
  coords := TRzDBGrid(Sender).MouseCoord(x, y); // 根据鼠标位置获得行列
  if (coords.X = DepositIndex) or (coords.X = ViewDetailIndex) then
    TRzDBGrid(Sender).Cursor := crHandPoint
  else
    TRzDBGrid(Sender).Cursor := crDefault;
end;

相关文章

  • DBGrid移动列之后找到指定FieldName的列号

    说明 这是两列需要在移动之后确定新的列号 定义DepositIndex和ViewDetailIndex 在From...

  • SAS日期弹框

    使用指示器@n指定移动到第n列,+n指定移动n列,/跳动到下一行,#n跳动到第n行。用@hold住当前行。(#行 ...

  • mysql 聚合函数和分组查询

    count():统计指定列不为NULL的记录行数;max():计算指定列的最大值,如果指定列是字符串类型,那么使用...

  • mysql 聚合函数和分组查询

    count():统计指定列不为NULL的记录行数;max():计算指定列的最大值,如果指定列是字符串类型,那么使用...

  • 2018-09-11

    常用聚合函数 COUNT():统计指定列不为NULL的记录行数;MAX():计算指定列的最大值,如果指定列是字符串...

  • 数据库 聚合函数

    聚合函数: COUNT():统计指定列不为NULL的记录行数;MAX():计算指定列的最大值,如果指定列是字符串类...

  • css3多列

    1、column-count属性指定元素的列数。 2、column-gap属性指定的列之间的差距。 注意:如果列之...

  • java Lambda List集合重复数据获取实现

    Map列表,对其中多个列进行分组,判断重复的实现 指定去重的列 按照指定的列分组 获取重复的key

  • Linux:cut--按列切分文件

    提取特定列 打印除了某列之外的所有列:--complement选项 打印指定字段的定界符:-d选项 指定字段的字符...

  • DQL数据查询 总结 & 实例 - SQL

    列控制 查询所有列 查询指定列 Where 去重查询 DISTINCT 完全重复记录只显示一次 列运算 列运算并不...

网友评论

      本文标题:DBGrid移动列之后找到指定FieldName的列号

      本文链接:https://www.haomeiwen.com/subject/awabsftx.html