注:此回复已自动翻译。因此,它可能包含语法错误或表达尴尬。
你好 何尧
感谢你在 Q&A 论坛发帖咨询。我理解你的问题;不过很抱歉地通知你,DataGridView 无法在 Microsoft Access 中使用。DataGridView 是一个 .NET WinForms 控件,而 Access/VBA 只能承载 COM/ActiveX 控件,无法加载 .NET WinForms 组件。
关于 MSHFlexGrid(MSHFLXGRD.OCX),该控件在今天同样并不理想,原因包括:
- 它只能在 32 位 Office 中使用
- 必须手动安装并通过管理员权限注册:
regsvr32 MSHFLXGRD.OCX(如有需要,还需在注册表中加入许可证密钥以启用完整功能) - 该控件已经过时,不建议在新的项目中使用,尤其是对于兼容性、部署和安全性方面都有风险
如果你使用的是 32 位环境,并且确实需要使用该控件,它确实可以通过 VBA 将 Recordset 绑定到网格,从而处理动态表格,但仍然建议优先考虑替代方案。
由于这些限制,DataGridView 在 Access 中不可行,而 MSHFlexGrid 也存在大量限制。 因此,在你的使用场景中,通常建议以下替代方案:
- 数据表单(Datasheet Form)或连续表单(Continuous Form)+ 动态临时表 (适用于需要动态列的交叉表场景) 例如,可使用 VBA 根据交叉表查询创建一个临时表,然后将其设为窗体的 RecordSource。
- 针对每一行设置不同数据源的 ComboBox(动态 RowSource) (适用于同一列的每行需要不同下拉数据源的情况) 例如,在窗体的 Current 事件中:
Me.ComboBoxName.RowSource = "SELECT ... WHERE ID = " & Me.CurrentID
希望这些信息对你有所帮助。如果你需要示例代码或需要协助实现这些方法,请告诉我。
注意:如果您希望收到此线程的相关电子邮件通知,请按照我们的文档中的步骤启用电子邮件通知功能