【问题标题】:Select field from dbgrid从 dbgrid 中选择字段
【发布时间】:2012-07-20 13:52:16
【问题描述】:

我有一个链接到 DataSource(链接到 TADOTable)的 DBGrid。所有这些都通过 TADOConnection 运行并连接到 MS Access

网格包含各种值,我想在单击特定字段时对其进行编辑。 我在更新普通文本字段时没有遇到任何困难,但是我无法编辑包含 OLE 对象的字段。

我想要做的是,当我单击一个字段时,我想要一个打开的对话框打开并让我选择一个文件。之后,我选择的文件必须更新为我选择的行的字段。

我该怎么做呢?

【问题讨论】:

  • DevExpress QuantumGrid 具有此功能以及更多功能。 devexpress.com/Products/VCL/ExQuantumGrid
  • 谢谢,但有什么方法可以在不使用非标准组件的情况下实现这一点?
  • 你可能想试试网格的 columns 属性。在这里,您可以将列定义为具有省略号按钮,然后您可以处理事件...这可能会提供您正在寻找的功能类型..
  • 您可以将按钮和打开对话框放到表单中。使按钮不可见。调整网格 onDrawColumnCell 中按钮的大小和位置。使按钮在网格 col 退出时不可见。在按钮的 onclick 事件中,执行 opendialog,获取文件名,将 dbgrid 置于编辑状态,并使用所选文件更新字段。一些教程存在于 (delphi.about.com/od/usedbvcl/l/aa081903a.htm) 如何将 varius 组件添加到 dbgrid。通过上面的修改,你可以达到你想要的。

标签: delphi delphi-7 dbgrid tadotable


【解决方案1】:

我自己想出来的。将其发布在这里,以便其他人可以受益。我刚刚去了我的 DBGrid,在对象检查器中,在事件下,我选择了 OnCellClick:

procedure TfrmOne.dbgOneCellClick(Column: TColumn);
begin
var
  line : integer;
begin
  line := DataSource1.DataSet.FieldValues['ID'];

如您所见,line 获取所选行的字段值,在本例中为 ID。每行都有其唯一的 ID(主键),链接/来自数据库。有了这个主键,我做了一个简单的 IF 语句:

tblOne.Close;
tblOne.Open;
tblOne.First
while not tblOne.Eof do
if tblOne['ID'] = line then
begin
 if OpenDialog1.Execute then
  {*Insert Code here*}
 Exit;
end else
 tblOne.Next;
end;

基本上第二段代码中发生的事情是,ID 与当前表行匹配。如果不匹配,则数据库移动一行,直到最终匹配。从这里可以专门处理该行(最初在 DBGrid 中看到/选择)和更新字段(OLE 对象)。

这不是 Append 或 Edit 命令的替代品,它仅允许用户执行 opendialog,然后将这些文件保存到 DBGrid 中的选定字段。请注意,要将照片添加到数据库 (jpeg),您将需要 blobstreams 等。可以在此处找到完整指南:http://delphi.about.com/od/database/l/aa030601a.htm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    相关资源
    最近更新 更多