以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]datacolchanging  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=79894)

--  作者:blsu33
--  发布时间:2016/1/11 20:34:00
--  [求助]datacolchanging
红袍老师,

 Case Else
        For Each dr As DataRow In dt2.DataRows
            MessageBox.Show(e.DataCol.Name & 1)
            MessageBox.Show(dr("列名") & 2)
            If e.DataCol.Name =dr("列名") Then
                MessageBox.Show(e.DataCol.Name =dr("列名"))
                Dim dr1,dr2 As DataRow
                dr1=e.DataTable.find(dr("列名") & "=\'" & e.NewValue & "\' And _Identify <> \'" & e.DataRow("_Identify") & "\'")
                dr2=e.DataTable.find(dr("列名") & " Like \'" & e.DataRow(dr("列名")) & "%\' and " & dr("列名") & " <> \'" & e.DataRow(dr("列名")) & "\' And " & dr("列名") & " Is Not null")
                If dr1 IsNot Nothing Then
                    MessageBox.Show("【" & e.NewValue & "】" & "重复是否正确!","请确认")
                    e.Cancel = True
                    e.DataRow.save
                    Exit For
                ElseIf dr2 IsNot Nothing Then
                    Messagebox.Show("存在下级编码,不能修改名称!","提示")
                    e.Cancel=True
                    e.DataRow.save
                    Exit For
                End If
                Functions.Execute("Haveuseadd",e)
            Else
                Continue For
            End If
        Next
        
提示

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20160111202709.png
图片点击可在新窗口打开查看



--  作者:大红袍
--  发布时间:2016/1/11 20:48:00
--  
 这段代码没问题,加入msgbox定位错误。
--  作者:blsu33
--  发布时间:2016/1/12 8:54:00
--  
o  找到了 老师,
 另外一个问题,第一个要是取消了,后面的for each 就会出错了,怎么能避免呢,还没想好

BeforeSaveDataRow


Dim e As object=args(0)
Dim bm As String=e.DataTable.name
Dim dt2 As DataTable
dt2 = Functions.Execute("loading","Z006配置列",0,"1=1")

Dim name As String
Dim fdr1 As List(of DataRow) = dt2.Select("表名=\'"& bm &"\' And 是否必填=True")
Dim fdr2 As List(of DataRow) = dt2.Select("表名=\'"& bm &"\' And 不允许重复=True")
If fdr1 IsNot Nothing Then
    For Each dr1 As DataRow In fdr1
        If e.DataRow(dr1("列名")) ="" OrElse e.DataRow(dr1("列名")).Contains(" ") OrElse e.DataRow(dr1("列名")) =Nothing Then \'如果未输入内容
            Dim Result As DialogResult
            Result = MessageBox.Show(dr1("列名") & "列存在异常字符或为空,是否返回!","提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
            If Result = DialogResult.Yes Then
                e.Cancel = True \'则禁止退出编辑模式
                Exit For
            Else
                e.DataTable.RejectChanges()
                Exit For
            End If
        End If
    Next
End If

’以下将会出错了,因为行没有了
If fdr2 IsNot Nothing Then
    For Each dr2 As DataRow In fdr2
        Dim dr As DataRow=e.DataTable.find(dr2("列名") & "=\'" & e.DataRow(dr2("列名")) & "\'And _Identify <> \'" & e.DataRow("_Identify") & "\'")
        If dr IsNot Nothing Then
            Dim Result As DialogResult
            Result =MessageBox.Show(e.DataRow(dr2("列名")) & "已经重复,是否返回!","提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
            If Result = DialogResult.Yes Then
                e.Cancel = True
                Exit For
            Else
                e.DataTable.RejectChanges()
                Exit For
            End If
        End If
    Next
End If
[此贴子已经被作者于2016/1/12 8:54:35编辑过]

--  作者:大红袍
--  发布时间:2016/1/12 9:16:00
--  

RejectChanges之后,再执行,不要写在前面。

 

Dim fdr2 As List(of DataRow) = dt2.Select("表名=\'"& bm &"\' And 不允许重复=True")


--  作者:blsu33
--  发布时间:2016/1/12 13:13:00
--  
老师,
   麻烦您再给看看,还是有错误,不知道怎么改

.NET Framework 版本:2.0.50727.3053
Foxtable 版本:2015.12.22.1
错误所在事件:表,表A,BeforeSaveDataRow
详细错误信息:
调用的目标发生了异常。
此行已从表中移除并且没有任何数据。BeginEdit() 将允许在此行中创建新数据


--  作者:blsu33
--  发布时间:2016/1/12 13:16:00
--  


[此贴子已经被作者于2016/1/12 14:50:47编辑过]

--  作者:大红袍
--  发布时间:2016/1/12 14:40:00
--  
Dim bm As String=e.DataTable.name
Dim dt2 As DataTable=DataTables("表B")
For Each dc As DataCol In DataTables(e.DataTable.name).DataCols
    Dim fdr1 As List(of DataRow) = dt2.Select("表名=\'"& bm &"\'")
    If fdr1 IsNot Nothing Then
        For Each dr1 As DataRow In fdr1
            If dc.Name=dr1("列名") Then
                If dr1("是否必填")=True Then
                    If e.DataRow(dr1("列名")) ="" OrElse e.DataRow(dr1("列名")).Contains(" ") OrElse e.DataRow(dr1("列名")) =Nothing Then \'如果未输入内容
                        Dim Result As DialogResult
                        Result = MessageBox.Show(dr1("列名") & "列存在异常字符或为空,是否返回!","提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                        If Result = DialogResult.Yes Then
                            e.Cancel = True \'则禁止退出编辑模式
                            Exit For
                        Else
                            e.cancel = True
                            e.DataTable.RejectChanges()
                            Return
                        End If
                    End If
                End If
                If dr1("不允许重复")=True Then
                    Dim dr As DataRow=e.DataTable.find(dr1("列名") & "=\'" & e.DataRow(dr1("列名")) & "\'And _Identify <> \'" & e.DataRow("_Identify") & "\'")
                    If dr IsNot Nothing Then
                        Dim Result As DialogResult
                        Result =MessageBox.Show(e.DataRow(dr1("列名")) & "已经重复,是否返回!","提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                        If Result = DialogResult.Yes Then
                            e.Cancel = True
                            Exit For
                        Else
                            e.cancel = True
                            e.DataTable.RejectChanges()
                            Return
                        End If
                    End If
                End If
            Else
                Continue For
            End If
        Next
    Else
        Exit For
    End If
Next

--  作者:blsu33
--  发布时间:2016/1/12 14:51:00
--  
哦 学习了 谢谢老师
--  作者:blsu33
--  发布时间:2016/1/12 16:16:00
--  
老师,
  在自定义函数中使用 Return  仅仅是停止执行一下,不需要返回值,用 Return Nothing 还是用Return false 哪一个好?

--  作者:blsu33
--  发布时间:2016/1/12 16:25:00
--  
顺便在问下老师,


7楼代码,判断好些罗列,是否过于啰嗦,请问老师会怎么设计或是写代码。