【问题标题】:How to bind textbox controls per row in access 2003如何在access 2003中每行绑定文本框控件
【发布时间】:2011-05-16 00:46:16
【问题描述】:

我是 Access 编程的新手,我正在尝试确定以连续形式为每一行绑定未绑定文本框控件的正确方法。

举个例子:

  1. 用于显示发票表中发票列表的连续表单。
  2. 名为 InvoiceItems 的表包含设备、费率和小时数。

我需要一个表单,其中一行包含发票,其中有一列是所有可用设备类型。

我计划为每种设备类型设置未绑定的文本框,然后在加载每个 Invoice 行时,挂钩到类似 OnRowDataBound 的东西,我可以在其中使用 InvoiceItems 表中的适当数据动态填充设备文本框。

示例:

表格:

  • 发票:发票ID、日期

    • [1, 4/10/2011]
  • InvoiceItems:设备 ID、费率、小时数

    • [2, 40, 1]

    • [3,20,3]

结果:

InvoiceID |    Date    | Shovel | Plow | DumpTruck
==================================================
   1        5/10/2011       3       1       0
   2        2/11/2011       1       0       1

然后每个文本框控件将挂钩到 onDirty 事件以更新相应的 InvoiceItem 行项目。

【问题讨论】:

    标签: ms-access


    【解决方案1】:

    您将无法在连续表单或数据表视图表单中执行此操作,因为更改一行的 ControlSource 属性会影响所有行。

    我不清楚为什么您甚至需要此选项,但听起来您的数据/表可能没有正确设计或未正确规范化。通常我会构建我的表格,以便 EquipType 是一个值,您可以更改以显示该行是什么类型的设备。您似乎以某种方式对每种不同的设备类型使用了不同的字段。

    假设您坚持使用当前设计,您可能会使用联合查询拼凑出一个解决方案,但您的记录集将无法更新。

    另一个建议是在表单上创建几个不同的文本框并动态更改可见属性。但是,这充满了问题,因为您一次只能在所有行上显示其中一个。此外,当他们移动到下一条记录时,您必须显示正确的记录,但是您将如何确定要显示的正确记录呢?

    从您所写的内容来看,您必须具有 .Net 编程经验。 Access 是一种不同的野兽,如果你按照它的规则玩,它会很好地工作。试图绕过一些标准的 Access 行为或设计通常会给程序员和用户带来挫败感。我认为在这种情况下,您需要评估您正在尝试做的事情,我建议您首先确保您的表架构是可靠的。也许您实际上已经过度规范化,需要返回并撤消一些规范化。

    【讨论】:

    • 感谢您的详尽回答。它帮助我想出了一个解决方案,尽管不是我正在寻找的原始解决方案。我不相信我试图过度规范化,但规范化是我的目标之一。最终,我不想每次添加新设备类型时都必须更改架构。但是由于表格要求设备类型在自己的列中排列,我认为设备必须保留在硬编码列中。
    猜你喜欢
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多