python - PyQt5 QSqlTableModel在行插入后取消
问题描述
根据 QSQLTableModel 的文档,在提交事务之前,从模型中删除一行不会从表视图中删除该行。我可以解决这个问题;但是,当我插入新行然后取消编辑时,我需要从模型和视图中删除该行。关于如何解决这个问题的任何建议?
class SclDataModel(QSqlTableModel):
def __init__(self, parent=None):
super(SclDataModel, self).__init__(parent)
self.setTable("scldata")
self.setEditStrategy(QSqlTableModel.OnManualSubmit)
self.setHeaderData(0, Qt.Horizontal, 'recordid')
self.setHeaderData(1, Qt.Horizontal, 'svcdataid')
self.setHeaderData(2, Qt.Horizontal, 'Receipts Start')
self.setHeaderData(3, Qt.Horizontal, 'Receipts End')
self.setHeaderData(4, Qt.Horizontal, 'Billing Rate')
self.action = 0
def revert(self):
if self.action ==1
# How TO Remove the inserted row from the view????
class SclDataBrowse(QWidget):
def __init__(self, parent=None):
super(SclDataBrowse, self).__init__(parent)
...
def add_record(self):
rec = self.model.record()
rec.setValue('recordid', str(uuid.uuid4()))
rec.setValue('svcdataid', self.parentid)
row = self.model.rowCount()
self.model.insertRecord(row, rec)
ndx = self.model.index(row, 2)
self.model.action = 1
self.tbl_View.edit(ndx)
self.tbl_View.selectionModel().setCurrentIndex(ndx, QItemSelectionModel.Select)
解决方案
将还原方法更改为以下内容:
def revert(self):
if self.action == 1:
self.removeRow(self.rowCount()-1)
self.submitAll()
推荐阅读
- ios - 如何在 Main.storyboard 中引用的不同 Storyboard 中为导航控制器设置标签栏图标和标题?
- javapackager - 是否有项目支持使用 javapackager 进行跨平台构建
- ios - 将文件保存到 Google Drive 中的共享文件夹
- html - 验证简单的可选输入
- c# - 为什么执行 WCF(.svc) 服务后找不到端点
- javascript - JavaScript 改变样式的 CSS 过渡
- c# - Xamarin - 以下方法或属性之间的调用不明确
- kubernetes - 从 pod 连接到其他 pod
- python - 优化 Django 的 QuerySetSequences
- java - 在 Docker 上调试 Java 应用程序