我当前的应用程序是一个多用户应用程序,其中所有用户都连接到同一个数据库.
使用DataTable,BindingSource和BindingNavigator将数据绑定到控件.
我想避免两个用户同时编辑DataRow.
因为我想在更通用的方法上实现这一点,所以我在考虑创建一个DataTable后代并添加属性LockMode(None,Row,Table).
我发现您可以将ColumnChanged事件与RowState结合使用来检测数据的更改.
我现在知道用户是否正在插入新值,编辑(RowState =已修改)现有值或仅在记录中查找(RowState = Unchanged).
因此,我正在寻找一个用户开始编辑时锁定DataRow的解决方案.在应用程序中,我想在用户导航(通过使用Bindingnavigator或以编程方式)到锁定记录时显示消息.
我找到的大多数解决方案都是针对MysqL Server的,例如:How to perform a row lock?或TransactionScope locking table and IsolationLevel.
但是我正在寻找Postgresql解决方案,所以即使是MS(https://msdn.microsoft.com/en-us/library/system.transactions.transactionscope(v=vs.110).aspx)关于这个主题的文章也不能在这里使用.
如果有Postgresql和ADO.NET经验的人能帮助我,我将不胜感激.谢谢.
我将添加一个额外的可以为空的日期列(RowIsBeeingEdited),指示行开始编辑的时间.我会设置行可编辑/不在客户端应用程序开始行[RowIsBeeingEdited]值.
我还会实现两个信号:{UserStartedEditingRow}& {UserFinishedEditingRow},它将传播到所有客户端,表明客户端X已开始/完成编辑行Y.
在开始编辑行时,我将设置行[RowIsBeeingEdited] = {now}并发送{UserStartedEditingRow}信号.在结束编辑时,我将设置行[RowIsBeeingEdited] = null并发送{UserFinishedEditingRow}信号.当前活动的客户端应该接收两个信号并设置行可编辑/不.
希望有一定的价值.