以文本方式查看主题 - Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp) -- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2) ---- 如何实现允许符合条件数据修改,不允许删除 (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=148905) |
||||
-- 作者:采菊东篱下 -- 发布时间:2020/4/18 10:33:00 -- 如何实现允许符合条件数据修改,不允许删除
密码:888888
当比赛积分表已引用基本信息表数据,允许基本信息表修改数据,比赛积分表同步自动更新,但不允许基本信息表删除它,DataColChanged事件中的代码实现了允许修改, Select Case e.DataCol.Name Case "棋赛名称","姓名" Dim Filter As String If e.DataCol.Name = "姓名" Then Filter = "[棋赛名称] = \'" & e.DataRow("棋赛名称") & "\'And 姓名 = \'" & e.OldValue & "\'" Else Filter = "[棋赛名称] = \'" & e.OldValue & "\'And 姓名 = \'" & e.DataRow("姓名") & "\'" End If e.DataRow.Save Dim drs As List(Of DataRow) = DataTables("比赛积分").Select(Filter) For Each dr As DataRow In drs dr(e.DataCol.Name) = e.NewValue Next End Select Select Case e.DataCol.Name Case "棋赛名称","编号" Dim Filter As String If e.DataCol.Name = "姓名" Then Filter = "[棋赛名称] = \'" & e.DataRow("棋赛名称") & "\'And 编号 = \'" & e.OldValue & "\'" Else Filter = "[棋赛名称] = \'" & e.OldValue & "\'And 姓名 = \'" & e.DataRow("编号") & "\'" End If e.DataRow.Save Dim drs As List(Of DataRow) = DataTables("比赛积分").Select(Filter) For Each dr As DataRow In drs dr(e.DataCol.Name) = e.NewValue Next End Select 但DataColChanging事件里却写入 Dim s As String = "不允许基本信息表删除已引用到比赛积分表的数据" Select Case e.DataCol.name Case "棋赛名称","姓名" Dim dt As DataRow Dim dt2 As DataRow dt = DataTables("比赛积分").SQLfind("棋赛名称 = \'" & e.DataRow("棋赛名称") & "\' And 姓名 = \'" & e.DataRow("姓名") & "\'") dt2 = DataTables("对阵表").SQLfind("红方_姓名 = \'" & e.DataRow("姓名") & "\'" OrElse "黑方_姓名 = \'" & e.DataRow("姓名") & "\'") If dt IsNot Nothing OrElse dt2 IsNot Nothing Then MessageBox.Show(s,"提示") e.Cancel= True End If e.Cancel = True Case "棋赛名称","编号" Dim dt1 As DataRow Dim dt3 As DataRow dt1 = DataTables("比赛积分").SQLfind("棋赛名称 = \'" & e.DataRow("棋赛名称") & "\'编号 And = \'" & e.DataRow("编号") & "\'") dt3 = DataTables("对阵表").SQLfind("红方_编号 = \'" & e.DataRow("编号") & "\'" OrElse "黑方_编号 = \'" & e.DataRow("编号") & "\'") If dt1 IsNot Nothing OrElse dt3 IsNot Nothing Then MessageBox.Show(s,"提示") e.Cancel= True End If End Select 不允许修改,很矛盾,请教如何实现这两项要求。 [此贴子已经被作者于2020/4/18 10:40:06编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2020/4/18 11:06:00 -- |
||||
-- 作者:采菊东篱下 -- 发布时间:2020/4/18 11:35:00 -- 我的要求是不允删除基本信息表中与比赛积分表的棋赛名称、编号或姓名相同的行,不是单独的棋赛名称、编号、姓名,因为同一人会在不同时期参加不同棋赛,这样写变成都不允许删除了。 |
||||
-- 作者:有点蓝 -- 发布时间:2020/4/18 12:09:00 -- 改为 Dim s As String = "不允许基本信息表删除已引用到比赛积分表的数据" Select Case e.DataCol.Name Case "棋赛名称","姓名" e.DataRow.Save If e.NewValue Is Nothing AndAlso e.OldValue > "" Dim Filter As String If e.DataCol.Name = "姓名" Then Filter = "[棋赛名称] = \'" & e.DataRow("棋赛名称") & "\'And 姓名 = \'" & e.OldValue & "\'" Else Filter = "[棋赛名称] = \'" & e.OldValue & "\'And 姓名 = \'" & e.DataRow("姓名") & "\'" End If Dim dt As DataRow dt = DataTables("比赛积分").SQLfind( Filter ) If dt IsNot Nothing Then MessageBox.Show(s,"提示") e.Cancel= True ElseIf e.DataCol.Name ="姓名" dt = DataTables("对阵表").SQLfind("红方_姓名 = \'" & e.DataRow("姓名") & "\' Or 黑方_姓名 = \'" & e.DataRow("姓名") & "\'") If dt IsNot Nothing Then MessageBox.Show(s,"提示") e.Cancel= True End If End If End If End Select Select Case e.DataCol.Name Case "棋赛名称","编号" e.DataRow.Save If e.DataCol.Name = "棋赛名称" AndAlso e.NewValue Is Nothing AndAlso e.OldValue > "" OrElse e.DataCol.Name = "编号" AndAlso e.NewValue = Nothing AndAlso e.OldValue <> Nothing Then Dim Filter As String If e.DataCol.Name = "编号" Then Filter = "[棋赛名称] = \'" & e.DataRow("棋赛名称") & "\'And 编号 = " & e.OldValue Else Filter = "[棋赛名称] = \'" & e.OldValue & "\'And 编号 = " & e.DataRow("编号") End If Dim dt As DataRow dt = DataTables("比赛积分").SQLfind(Filter ) If dt IsNot Nothing Then MessageBox.Show(s,"提示") e.Cancel= True End If End If End Select |
||||
-- 作者:采菊东篱下 -- 发布时间:2020/4/18 15:47:00 -- 不行,比赛积分表有符合条件的数据,基本信息表依然能删除数据和行,另比赛积分表姓名下拉选项没有同步添加新增选项。 |
||||
-- 作者:有点蓝 -- 发布时间:2020/4/18 16:44:00 -- 我测试没有问题。列出测试步骤 |
||||
-- 作者:采菊东篱下 -- 发布时间:2020/4/18 16:59:00 -- ![]() ![]() [此贴子已经被作者于2020/4/18 19:56:45编辑过]
|
||||
-- 作者:采菊东篱下 -- 发布时间:2020/4/18 16:59:00 -- ![]() ![]() ![]() ![]() [此贴子已经被作者于2020/4/18 17:00:38编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2020/4/18 17:08:00 -- 我以为是删除单元格数据,如果是整行删除要到BeforeDeleteDataRow事件处理:http://www.foxtable.com/webhelp/topics/0632.htm 原来的代码都没有针对新增的处理,参考 Select Case e.DataCol.Name Case "棋赛名称","姓名" e.DataRow.Save If e.OldValue > "" Dim Filter As String If e.DataCol.Name = "姓名" Then Filter = "[棋赛名称] = \'" & e.DataRow("棋赛名称") & "\'And 姓名 = \'" & e.OldValue & "\'" Else Filter = "[棋赛名称] = \'" & e.OldValue & "\'And 姓名 = \'" & e.DataRow("姓名") & "\'" End If Dim drs As List(Of DataRow) = DataTables("比赛积分").Select(Filter) If drs.Count = 0 Then Dim nr As DataRow = DataTables("比赛积分").AddNew nr("棋赛名称") = e.DataRow("棋赛名称") nr("姓名") = e.DataRow("姓名") nr("编号") = e.DataRow("编号") Else For Each dr As DataRow In drs dr(e.DataCol.Name) = e.NewValue Next End If End If End Select |
||||
-- 作者:采菊东篱下 -- 发布时间:2020/4/19 9:01:00 -- 不行基本信息表里添加人,比赛积分表的姓名下拉选项中没有同步添加,基本信息表里删除人,比赛积分表已有引用数据,基本信息表应不能删除它的数据却能被删除,删除后比赛积分表没同步删除它的所有信息!
密码:888888
[此贴子已经被作者于2020/4/19 19:35:16编辑过]
|