带有未绑定列的 Devexpress 网格

2023-12-29

我有一个 DevExpress 网格,我想在其中添加一个未绑定的复选框以便能够选择某些项目。 选择完成后,我按下一个按钮,我必须循环网格才能获取所有选定的项目。 它必须是一个复选框。我尝试过使用多选网格,但用户无法使用它。

我已经尝试了在支持网站上找到的所有示例,但没有成功。

  • 我需要非绑定方法,因为它是多用户设置,并且用户一直在相互选择和取消选择。

我的问题:有人有一个工作示例来说明如何做到这一点吗?


我已经这样做了,但它(是!)非常丑陋!创建具有绑定列的网格视图,并添加字段类型为布尔值的未绑定复选框列。

基本上我处理网格视图的 OnCellClick 。我检查单击的项目是否是复选框列 - 通过在视图中查找具有复选框类型的第一个未绑定列。然后我切换它的状态。

我已将数据集上的自动编辑设置为 true,但删除/编辑/插入设置为 false,而 ImmediateEditor 为 false。不确定其中哪些是重要的。

我认为最困难的事情是试图弄清楚网格和视图级别对象的复杂层次结构,并找出哪些级别包含哪些所需的位。我确信有更好的方法来做到这一点,但我们现在所拥有的方法是有效的,我不会再碰它了!

这是从我的代码中提取的,但略有修改,并且没有按原样进行测试 - 它还需要更多的错误检查:

procedure TMyForm.ViewCellClick(Sender: TcxCustomGridTableView;
  ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
  AShift: TShiftState; var AHandled: Boolean);
var
  col: TcxGridColumn;
begin
  // Manually handle the clicking of the checkbox cell - otherwise it seems
  // virtually impossible to get the checked count correct.
  col := GetViewCheckColumn(Sender);
  if (Sender.Controller.FocusedItem = col) then
  begin
    ToggleRowSelection(TcxCustomGridTableView(TcxGridSite(Sender).GridView), col);
  end;
end;

procedure TMyForm.ToggleRowSelection(AView: TcxCustomGridTableView; ACol: TcxGridColumn);
var
  rec: TcxCustomGridRecord;
begin
  rec := AView.Controller.FocusedRecord;
  if (rec = nil) then exit;

  if (rec.Values[ACol.Index] = TcxCheckBoxProperties(ACol.Properties).ValueChecked) then
  begin
    rec.Values[ACol.Index] := TcxCheckBoxProperties(ACol.Properties).ValueUnchecked;
  end
  else
  begin
    rec.Values[ACol.Index] := TcxCheckBoxProperties(ACol.Properties).ValueChecked;
  end;
end;


function TMyForm.GetViewCheckColumn(AView: TcxCustomGridView): TcxGridColumn;
var
  index: integer;
  vw: TcxCustomGridTableView;
  item: TcxCustomGridTableItem;
begin
  // We're looking for an unbound check box column - we'll return the first
  // one found.

  Assert(AView <> nil);
  result := nil;
  if (AView is TcxCustomGridTableView) then
  begin
    vw := TcxCustomGridTableView(AView);
    for index := 0 to vw.ItemCount - 1 do
    begin
      item := vw.Items[index];
      if (item.Properties is TcxCustomCheckBoxProperties) then
      begin
        if (item is TcxGridDBColumn) then
        begin
          if (TcxGridDBColumn(item).DataBinding.FieldName = '') then
          begin
            result := TcxGridColumn(item);
            break;
          end;
        end;
      end;
    end;
  end;
end;

然后,我通过检查网格 OnKeyUp 中的空格键并调用 ToggleRowSelection 来扩展它,对于双击一行也类似。

迭代行时,您可以使用类似以下内容来测试是否检查了行:

function TMyForm.GetViewIsRowChecked(AView: TcxCustomGridView; ARecord: TcxCustomGridRecord): boolean;
var
  col: TcxGridColumn;
begin
  result := False;
  col := GetViewCheckColumn(AView);
  if ((col <> nil) and (ARecord <> nil)) then
  begin
    result := (ARecord.Values[col.Index] = TcxCheckBoxProperties(col.Properties).ValueChecked);
  end;
end;

我想就是这样。我从我们建立了一段时间的大型网格/视图辅助单元中挖出了它。哦,它目前正在使用带有 DXVCL v2011 vol 1.10 的 Delphi 2010。

希望能帮助到你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有未绑定列的 Devexpress 网格 的相关文章

  • 面向 Delphi 开发人员的 Qt

    有人知道为 Delphi C Builder VCL 开发人员解释 Qt 的书籍或教程吗 对于具有该背景的开发人员来说 学习 Qt 的最佳方法是什么 我对如何使用 Qt 完成我知道如何在 Delphi 中完成的事情特别感兴趣 例如 Qt 相
  • 如何在gridview中根据屏幕尺寸设置图像宽度高度

    我想显示 3x3 大小的网格视图 我想根据设备尺寸设置高度和宽度 我正在参考这个链接 http www tutorialspoint com android android grid view htm 主要活动 public class M
  • GridView 仅显示第一个检索到的记录

    我成功地从数据库中检索了我需要的所有记录 但是只有一条记录显示在我的数据库中GridView 在过去的几天里我一直在尝试解决这个问题 因为我没有其他选择可以尝试 所以我真的很沮丧 我迫切需要一些帮助 我尝试操作查询 因为我最初认为这是问题所
  • 新编译的应用程序需要 UAC/elevation?

    我有一个系统 我将其设置为普通的 UAC 并在我的 delphi 环境中编译名为 ka exe 的项目 并为其创建一个 installshield 项目 设置完毕 一切顺利 但每当我开始我的程序时 它都需要提升 而我不知道为什么 为了确保
  • Soap Delphi 客户端因 1MB 调用超时而结束

    我们正在开发 SOAP Web 服务 Apache PHP 所有小规模调用都运行良好 但对于 1Mb 的 Soap 调用 HTTPS 调用大小为 1MB 我们的 Delphi Soap 客户端在除一台 PC 之外的所有 PC 上都因超时而停
  • 如何将IDL导入到Delphi中?

    我如何导入接口定义语言 idl 文件存入Delphi 将类型和接口转换为 pascal 文件 我试过了 File Open 它只显示 idl 文本文件的文本 Project 添加到项目 它只是 就像 添加了一个 idl文本文件到项目 成分
  • 如何检查文件是否有备用数据流?

    Delphi 有没有办法检查文件是否有任何备用数据流 看一下 Win32 APIFindFirstStreamW https msdn microsoft com en us library windows desktop aa364424
  • 从不同的形式调用过程

    我正在使用 Lazarus 我有一个名为TForm1单元名称为 Unit 1 在这里我有一个名为mergeDATfile a shortint 这会产生一些东西 顺便说一句 我必须创建另一个名为TForm2里面有按钮 Button1 当它被
  • 指针^ 与 s[1]

    在读取数据的函数中 数据含义只字符串 从磁盘 我应该更喜欢哪个 哪个更好 A DiskStream Read Pointer s Count or B DiskStream Read s 1 Count Note 我知道两者都有相同的结果
  • 为什么不提高EInvalidPointer?

    德尔福文档状态 http docwiki embarcadero com Libraries en System SysUtils EInvalidPointer 切勿提出E无效指针直接异常 E无效指针由内存管理器内部引发 我正在编写一个自
  • 使用 Inno Setup 中格式化(部分粗体)的文本制作安装程序?

    有人看过 GOG com 游戏安装程序吗 如何制作像这样的欢迎文本字符串 包括单个标题中的路径和需要大小 其中部分内容加粗 以下是修改安装路径后如何更改字符串换行的示例 您可以使用TRichEditViewer http www jrsof
  • 如何在Delphi中实现人工神经网络? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想要一个人工神经网络 42 个输入神经元 168 个隐藏神经元 7个输出神经元 这个网络就是玩 连四子 的游戏 每场比赛结束时 网络
  • 我的 Delphi 11.1 调试器在 x64 项目上突然变得非常缓慢;大约一周前还可以。有什么想法吗?

    更新 拔掉网络 电缆和wifi 会导致 几乎 恢复正常的调试速度 已尝试禁用防火墙没有任何变化 但没有网络恢复正常服务 更新 2 所有 Windows x64 版本都存在缓慢问题 而不仅仅是单个大型项目 如果我构建并调试 32 位 Wind
  • Delphi:如何检查是否按下了任何鼠标按钮 - 在鼠标事件之外?

    我有一个 TDrawGrid 想要处理单击单元格并使用鼠标滚轮滚动单元格的方式略有不同 使用鼠标滚轮滚动时 视图应以选定的单元格为中心 而仅单击单元格时 视图不应居中移动 因为这会令人困惑 用鼠标滚轮滚动会触发OnSelectCell事件
  • 回发后保持网格视图中 div 的滚动条位置

    我在 web config 中使用了以下代码 以便在服务器回发后保持滚动条位置
  • 有没有其他方法可以在delphi上观看youtube视频?

    我看到http www delphiflash com demo youtube video http www delphiflash com demo youtube video关于如何在 delphi 上加载 flash 视频 但它不是
  • 使用 gmail 和 Indy 发送电子邮件

    我正在尝试使用 gmail 从 Delphi 发送电子邮件 我有 Indy 10 5 9 0 和 Delphi XE3 我从以下位置获得了示例代码 http www andrecelestino com delphi xe envio de
  • 以高效的方式将字符串转换为十六进制

    我开发了以下函数将字符串转换为十六进制值 function StrToHex const S String String const HexDigits array 0 15 of Char 0123456789ABCDEF var I I
  • delphi检查ini文件是否存在

    如何检查 INI 文件是否存在 在特定路径和特定名称下 比如这样 if FileExists c yourinifile ini then ShowMessage c yourinifile ini exists
  • 以编程方式在网格视图列上显示数据

    我有一个产品数量列表和一个网格视图 网格视图已经绑定到一些数据 但我想在网格视图的第三列显示产品数量列表 以下是如何将数据绑定到网格视图的代码 gvProduct DataSource distSPUItem gvProduct DataB

随机推荐