【问题标题】:How to add a non-bound column to a DevExpress DB QuantumGrid如何将非绑定列添加到 DevExpress DB QuantumGrid
【发布时间】:2012-12-07 03:41:32
【问题描述】:

我正在使用这些组件:

UniDac for connection to mysql database
DevExpress for QuantumGrid

IDE:

Embarcadero Rad Studio XE2

我有一个具有一个级别的 cxGrid 组件和一个指定为级别视图的 cxGrid1DBTableView。我可以从我的数据库中获取数据并在网格中对其进行编辑。我想添加一个不在绑定数据集中的列。当我将 Column properties 值指定为 CheckBox 时,我可以看到该列,但无法通过单击将值从未选中更改为选中。该字段没有分配给它的 DataBinding。我尝试了其他类型的属性,但都相同,我无法更改网格中的行值。

我这几天一直在寻找解决这个问题的方法,所以我希望你们能帮助我。

【问题讨论】:

    标签: delphi devexpress delphi-xe2 vcl unidac


    【解决方案1】:

    您是否要添加一个后面没有数据库字段的复选框项目?我的一张表格上有这个。

    除了将 Properties 设置为“Checkbox”之外,您还需要将 DataBinding -> ValueType 设置为“Boolean”。 DataBinding->FieldName 可以留空。

    要访问这些值或更改它们的默认值,您可以像这样使用 DataController:

    View.DataController.Values[i, CheckBoxFieldIndex] := true;
    

    另外你需要设置

    DataController.DataModeController.SmartRefresh := true; 
    

    要设置该选项,您还需要为控制器定义一个 KeyField (DataController.KeyFieldNames)

    将 SmartRefresh 设置为 true 将阻止网格尝试从基础数据集中获取更新的值。您需要防止刷新,否则非绑定列的值将被设置回 Null。这对更新数据集的方式有一些限制。除非您明确刷新网格,否则对代码中数据所做的任何更改都不会反映在网格中。

    【讨论】:

    • 嗯,这对我有帮助,现在我可以检查它,但如果我检查一行然后尝试检查另一行,则我无法选择多行第一个取消选中:/ 我可以为多选执行此操作吗?我的意思是我需要允许用户检查多行,并且我有另一列,其中有一个数据库字段状态,我想制作以便用户可以从组合框中选择一个值,我将组合框放在选项和DataBinding ValueType=String 和 FieldName=Status 与这些设置我可以看到复选框但是当我选择不同的值时没有任何反应:/
    • 我忘了需要设置“SmartRefresh”属性。我刚刚更新了我的答案。
    • 这对 CheckBox 很有用,因为它没有设置数据库字段,我会接受你的回答 :) 谢谢你能否解释一下为什么我可以更改复选框的值,但我不能更改 ComboBox有一个设置 DataBinding->FieldName = Status 和 DataBinding->ValueType = String 我可以看到列表,但是当我选择任何项目时它在网格中没有改变:)
    • 不确定组合框问题。您应该把它变成一个不同的问题,并包括有关如何设置数据集字段和网格列的更多信息。
    • 好的,谢谢你的帮助,我会再问一个问题 :) 你为我节省了很多时间 :)
    【解决方案2】:

    您还必须使用数据集字段之一填充字段 View.DataController.KeyFieldNames。至少我在 Delphi 7 中需要它。

    【讨论】:

      猜你喜欢
      • 2010-12-26
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多