以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请检查菜单的重置列有无问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=46160)

--  作者:blackzhu
--  发布时间:2014/2/18 11:02:00
--  请检查菜单的重置列有无问题
新版的菜单 重置列 不知道 为啥  一个很简单的代码 只要重置列一下 就直接退出系统.
--  作者:狐狸爸爸
--  发布时间:2014/2/18 11:03:00
--  
这个不是重置列的问题,是DatacolChanged事件的问题,而且通常是死循环的问题。
--  作者:blackzhu
--  发布时间:2014/2/18 11:04:00
--  
看GIF 


图片点击可在新窗口打开查看此主题相关图片如下:重置列.gif
图片点击可在新窗口打开查看


--  作者:blackzhu
--  发布时间:2014/2/18 11:06:00
--  
我在几个表里面 都发现有这个问题

在 DataColChanged 里面的代码如下  应该不存在代码问题


If e.DataCol.Name = "条形码" Then
    Dim cmd As New SQLCommand
    Dim dt As DataTable
    cmd.C
    Dim dr As DataRow = e.DataRow
    cmd.CommandText = "SELECT * From {商品资料} Where [条形码] = \'" & dr("条形码") & "\'"
    dt = cmd.ExecuteReader
    If dt.DataRows.Count > 0 Then
        dr("名称") = dt.DataRows(0)("名称")
        dr("类别") = dt.DataRows(0)("类别")
        dr("单位") = dt.DataRows(0)("单位")
        dr("规格") = dt.DataRows(0)("规格")
        dr("颜色") = dt.DataRows(0)("颜色")
        dr("品牌") = dt.DataRows(0)("品牌")
        dr("零售价") = dt.DataRows(0)("零售价")
        dr("供货商") = dt.DataRows(0)("供货商")
        dr("原价") = dt.DataRows(0)("成本价")
    Else
        dr("名称") = Nothing
        dr("类别") = Nothing
        dr("单位") = Nothing
        dr("规格") = Nothing
        dr("颜色") = Nothing
        dr("品牌") = Nothing
        dr("零售价") = Nothing
        dr("供货商") = Nothing
        dr("原价") = Nothing
    End If
End If

If e.DataCol.Name = "条形码" Then
    Dim cmd As New SQLCommand
    Dim dt As DataTable
    Dim dr As DataRow = e.DataRow
    cmd.C
    cmd.CommandText = "SELECT * From {促销设定} Where [条形码] = \'" & e.NewValue & "\' And [起始时间] <= #" & dr("销售日期") & "# And [结束时间]>=#" & dr("销售日期") & "#"
    dt = cmd.ExecuteReader
    If dt.DataRows.Count > 0 Then
        dr("促销折扣") = dt.DataRows(0)("促销折扣")
    Else
        dr("促销折扣") = Nothing
    End If
End If

Select Case e.DataCol.Name
    Case "折扣","零售价","促销折扣"
        If e.DataRow(e.DataCol.Name) Then
            e.DataRow("零售价")=Nothing
        Else
            If e.DataRow.IsNull("促销折扣") = False AndAlso e.DataRow("促销折扣") >=0 Then
                e.DataRow("零售价")=e.DataRow("原价")*e.DataRow("促销折扣")
            Else
                e.DataRow("零售价")=e.DataRow("原价")*e.DataRow("折扣")
            End If
        End If
End Select

If e.DataCol.Name = "销售数量" Then
    If e.DataRow.IsNull("销售数量") Then
        e.DataRow("销售金额")=Nothing
    Else
        e.DataRow("销售金额")=e.DataRow("销售数量")*e.DataRow("零售价")
    End If
End If

--  作者:blackzhu
--  发布时间:2014/2/18 11:07:00
--  
我直接输入数据 这些代码都可以执行 并无退出现象
--  作者:blackzhu
--  发布时间:2014/2/18 11:19:00
--  
我仔细检查了 还是触发列的列名 套用造成的.