LibreOffice Base 表单:填充表格或网格控件未绑定到数据源
Posted
技术标签:
【中文标题】LibreOffice Base 表单:填充表格或网格控件未绑定到数据源【英文标题】:LibreOffice Base form: filling table or grid control not bound to data source 【发布时间】:2021-05-15 07:48:32 【问题描述】:我有一个 LibreOffice Base DB,上面有一个表单和一个表格控件。有一个宏可以获取一些数据以放入表中。该表未绑定到数据源,它有 1 列“id”。我尝试使用以下代码向空表添加一行:
oFormTasks = oCurrentDocument.Forms.getByName("form_tasks")
oGridTasksNotDone = oFormTasks.getByName("grid_tasks_not_done")
oRowSetTasksNotDone = oGridTasksNotDone.getRowSet()
oRowSetTasksNotDone.insertRow()
并得到“功能序列错误”。 向表中添加行的正确方法是什么? 如果不可能,我可以使用某种网格控件吗?我需要它的形式,而不是对话框。
【问题讨论】:
您能否编辑问题以描述您如何创建此示例,尤其是如何定义“id”列?当我尝试它时,我有一个没有任何列的空表控件。看起来可能需要创建列和数据模型,以便可以正确添加新行,例如ask.libreoffice.org/en/question/67644/…。 好的,经过您的编辑和评论,我想我明白了。要添加“id”列,我单击控件并选择“插入列”。我会进一步调查,然后发布回复。 【参考方案1】:来自https://wiki.documentfoundation.org/images/b/b0/BH5009-Macros.pdf:
对于新记录有一种特殊的方法,类似于在表中更改为新行 控制。这样做如下:
准备新记录:
oForm.moveToInsertRow()
输入所有想要/需要的值。这是使用上一节所示的 updateXxx 方法完成的。 使用以下命令确认新数据:oForm.insertRow()
新条目不能轻易撤消。相反,您将不得不删除新记录。
编辑:
让我们从一些背景信息开始,然后我会提供一个解决方案。
getRowSet()
方法具有误导性,因为表格控件本身没有行集。相反,该方法获取包含表格控件的表单的行集。
与列表或组合框不同,未绑定的表格控件似乎不能有数据。 columnNames = oGridTasksNotDone.ElementNames
是可能的,但仅此而已。
您可以使用oGridModel.GridDataModel = oDataModel
之类的代码在对话框中创建UNO 网格控件,但这不适用于表单。
通过Form -> Form Navigator,一个基本表单文档可以包含多个独立的表单。请注意,我不是在谈论子表单或不同的表单文档,而是在导航器中谈论例如“Form1”、“Form2”。这允许在同一个文档中使用不必相互关联的数据。
对我来说,显而易见的解决方案是创建一个仅用于表格控件的表格“Table2”。如上一段所述,创建一个单独的***表单“Form2”来处理表格控件,并将其记录集源设置为 Table2。然后一个宏可以填充表格控件:
-
从Form2(即Table2)的记录集中删除所有记录
从 Form1 收集数据(基于 Table1 或 Query1 或涉及的任何其他数据)
使用 Form2 的记录集插入行
或者,如果要求不使用绑定控件,您可以在表单上创建文本表(Table -> Insert Table)并编写宏以将值插入其中。
参考资料:
https://forum.openoffice.org/en/forum/viewtopic.php?f=39&t=87230 https://ask.libreoffice.org/en/question/67644/looking-to-create-grid-not-table-control-on-base-form/【讨论】:
据我了解,这部分是关于绑定到表单的数据集。我没有。我在这里收到相同的错误消息:“oForm.moveToInsertRow()” 谢谢。使用特殊的数据库表作为表控件的数据集,它可以完美地工作。通过宏中的查询,我可以轻松地删除、添加、更改数据库表中的条目并使用 .reload() 方法来显示更改。它工作得比我预期的还要好,因为它将数据保存在基础中以供进一步处理。非常感谢!以上是关于LibreOffice Base 表单:填充表格或网格控件未绑定到数据源的主要内容,如果未能解决你的问题,请参考以下文章
在 LibreOffice 中使用 CLI --convert-to 参数时如何删除表格填充