-
我最近在写一个数据库增删改查功能,因为列数不固定,查询文档后得知有两种方案一种是动态表格,一种是动态列。因为两者都能够支持数据列不固定的这一需求,就先选了动态表格方案。 我发现这个方案很难与数据库做同步,具体会遇到: 综上所述,动态表格方案好像不太适合逐条记录地更新数据库?也可能是我没有找到正确的使用方法,还请指教,感谢! |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 12 replies
-
@zhyy2008z 首先感谢来社区提问,帮忙给项目一个 star 先谢谢了 尽量提供复现例子,并截图画框标注箭头,光凭中文文字描述很难顺畅沟通。你的代码也没有,不知道具体如何使用的组件 |
Beta Was this translation helpful? Give feedback.
-
感谢回答!我想说明一下,这段逻辑不是权限,而是数据校验,由于在动态表格模式下,点击新建按钮的时候会立刻把空白数据显示在界面表格里,并且还不处于编辑模式,为了保证数据库与界面显示一致,我只能先参考外部的两个输入框的值(该数据表的两个主键)在数据库新建一条对应记录,如果数据记录可以添加成功,则允许界面添加这行,否则不允许。 我想应该是我的需求与控件的设计初衷不一致,我才会遇到此问题,因此,才有了这个FAQ。我已经使用Reflection.Emit API动态生成实体类型来实现这个功能了,最基本的列绑定模式,在这个模式下新建按钮会先显示新建对话框,点击保存按钮后会执行数据库添加逻辑,并根据添加是否成功来决定是否真的添加到界面,编辑、删除也是同理,非常符合我的需求。 |
Beta Was this translation helpful? Give feedback.
我理解这个的。我们的组件库我们自己都在大量使用,不是跟别的组件库是的,他们自己都不用。所以你这个我很理解。我们先梳理一下
假设是一个文本框,用户 UI 更改了文本框的值,这个时候不管你数据库保存成功与否,这个时候 UI 都已经变了啊。所以你这个思维逻辑需要改变
我是想用户的每次增删改查操作都及时同步到数据库中,如果失败了就不更新界面,成功了才去更新界面
这个思路就给自己制造了很多困难
正确的思路应该是,组件只负责 UI 保存数据成功或者失败跟组件无关,首先你要认可这一点,所以如果保存成功了。我们可以不更新 UI 保持即可;如果保存失败了,你就重置
Context
再给Table
组件,组件就会把老数据恢复了啊,当然这只是一个思路而已,也可以单元格自己出现红框等,这些都是自己的业务设计跟逻辑,仅供参考我担心你又会继续问如何重置
Context
我再给你一段代码片段第四个参数是一个回调,就是底层数据库保存失败或者成功后,都回调这个这个回调又调用自己并且
StateHasChanged
我们的系统是多人协作的。所…