以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  调用的目标发生了异常。 未将对象引用设置到对象的实例。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=125707)

--  作者:hc-mall
--  发布时间:2018/10/4 14:33:00
--  调用的目标发生了异常。 未将对象引用设置到对象的实例。
我是一个初学者,现在遇到了这种问题,找不出原因!请专家给解答一下!


.NET Framework 版本:2.0.50727.4984
Foxtable 版本:2018.9.9.1
错误所在事件:表,商品主表, DataColChanged
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。

代码如下:

Dim dc As DataCol
Dim dr As DataRow
Select Case e.DataCol.name \'判断发生数据更改的列列名是不是我们要的列名
    
    Case "商品简名" \'如果列名是"商品简名"则执行下面的语句
        If e.NewValue Is Nothing Then \'如果新录入的数据为空
            e.DataRow("商品全名") = Nothing \'则对应行的商品拼音码录入空值
        Else \'如果有录入,则执行下面的代码
            If dr.IsNull("自定义分类") Then
                If dr.IsNull("品牌") Then
                    e.DataRow("商品全名") = dr("商品简名")
                Else
                    e.DataRow("商品全名") = (dr("品牌") & dr("商品简名"))
                End If
            Else
                If dr.IsNull("品牌") Then
                    e.DataRow("商品全名") = (dr("自定义分类") & dr("商品简名"))
                Else
                    e.DataRow("商品全名") = (dr("品牌") & dr("自定义分类") & dr("商品简名")) \'则如果品牌,商品?自定义分类全部有数据
                End If
            End If
        End If
        
    Case "商品全名" \'如果列名是"商品全名"则执行下面的语句
        If e.NewValue Is Nothing Then \'如果新录入的数据为空
            e.DataRow("商品拼音码") = Nothing \'则对应行的商品拼音码录入空值
        Else \'如果有录入,则执行下面的代码
            e.DataRow("商品拼音码") = getpinyin(e.NewValue ,1) \'将信录入的内容以拼音码的的形式录入商品拼音码
        End If
End Select

--  作者:hc-mall
--  发布时间:2018/10/4 14:42:00
--  
我是不太懂,主要根据教学视频,边学边做!就这段代码,我想实现,通过“品牌”、“自定义分类”、“商品简名”,自动组合生成“商品全名”,如果“商品简名”为空值,则不填入,如果商品简名有,就判断“品牌”、“自定义分类”是否为空,为空则由其他值和“商品简名”一起组成“商品全名”。
如果商品全名有变动,则自动生成商品拼音码!

--  作者:有点甜
--  发布时间:2018/10/4 16:32:00
--  

改成这样

 

Dim dr As DataRow = e.DataRow
Select Case e.DataCol.name \'判断发生数据更改的列列名是不是我们要的列名   
    Case "商品简名", "品牌", "自定义分类"
        If e.NewValue = Nothing Then \'如果新录入的数据为空
            e.DataRow("商品全名") = Nothing \'则对应行的商品拼音码录入空值
        Else \'如果有录入,则执行下面的代码
            If dr.IsNull("自定义分类") Then
                If dr.IsNull("品牌") Then
                    e.DataRow("商品全名") = dr("商品简名")
                Else
                    e.DataRow("商品全名") = (dr("品牌") & dr("商品简名"))
                End If
            Else
                If dr.IsNull("品牌") Then
                    e.DataRow("商品全名") = (dr("自定义分类") & dr("商品简名"))
                Else
                    e.DataRow("商品全名") = (dr("品牌") & dr("自定义分类") & dr("商品简名")) \'则如果品牌,商品?自定义分类全部有数据
                End If
            End If
        End If
       
    Case "商品全名" \'如果列名是"商品全名"则执行下面的语句
        If e.NewValue = Nothing Then \'如果新录入的数据为空
            e.DataRow("商品拼音码") = Nothing \'则对应行的商品拼音码录入空值
        Else \'如果有录入,则执行下面的代码
            e.DataRow("商品拼音码") = getpinyin(e.NewValue ,1) \'将信录入的内容以拼音码的的形式录入商品拼音码
        End If
End Select


--  作者:hc-mall
--  发布时间:2018/10/4 17:33:00
--  
谢谢,试了。可以了!就是没有实例化dr是吧!
Dim dr As DataRow = e.DataRow
还有就是想问问,有没有更好的方法,直接没有输入的话直接空值合并到字符串里面可以吗?有没有简单点的办法!这个代码我个人感觉有点啰嗦!但空值合并到代码里面好像又显示不出来!

--  作者:有点甜
--  发布时间:2018/10/4 17:35:00
--  
Dim dr As DataRow = e.DataRow
Select Case e.DataCol.name \'判断发生数据更改的列列名是不是我们要的列名
    Case "商品简名", "品牌", "自定义分类"       
        e.DataRow("商品全名") = dr("品牌") & dr("自定义分类") & dr("商品简名") \'则如果品牌,商品?自定义分类全部有数据              
    Case "商品全名" \'如果列名是"商品全名"则执行下面的语句
        If e.NewValue = Nothing Then \'如果新录入的数据为空
            e.DataRow("商品拼音码") = Nothing \'则对应行的商品拼音码录入空值
        Else \'如果有录入,则执行下面的代码
            e.DataRow("商品拼音码") = getpinyin(e.NewValue ,1) \'将信录入的内容以拼音码的的形式录入商品拼音码
        End If
End Select

--  作者:hc-mall
--  发布时间:2018/10/4 19:54:00
--  
这样不行啊!只要有空值,最后结果就不显示!有方法可以把空值也可以合并进来吗?或者是空值项在合并的时候可以忽略不计吗?
--  作者:有点甜
--  发布时间:2018/10/4 20:01:00
--  

你的意思是,这句代码无效?不可能的,所有列的值都一起合并起来的。

 

e.DataRow("商品全名") = dr("品牌") & dr("自定义分类") & dr("商品简名") \'则如果品牌,商品?自定义分类全部有数据      


--  作者:hc-mall
--  发布时间:2018/10/4 20:03:00
--  
就是有些时候“属性”或者“型号"是没有数据的!这样"商品全名"就无法显示了啊!有方法解决吗?
--  作者:有点甜
--  发布时间:2018/10/4 20:09:00
--  
以下是引用hc-mall在2018/10/4 20:03:00的发言:
就是有些时候“属性”或者“型号"是没有数据的!这样"商品全名"就无法显示了啊!有方法解决吗?

 

不应该的,代码没问题,做个例子发上来测试。


--  作者:hc-mall
--  发布时间:2018/10/4 21:12:00
--  

确实可以,我前面不行是case后面只加了一个“商品简名”其他没加!

 

------下面将我臃肿的代码发上来,以后研究!

Dim dr As DataRow = e.DataRow
Dim dt As DataTable
Select Case e.DataCol.name \'判断发生数据更改的列列名是不是我们要的列名

Case "商品简名" \'如果列名是"商品简名"则执行下面的语句
If e.NewValue Is Nothing Then \'如果新录入的数据为空
e.DataRow("商品全名") = Nothing \'则对应行的商品拼音码录入空值
Else \'如果有录入,则执行下面的代码
If dr.IsNull("属性") Then
If dr.IsNull("型号") Then
If dr.IsNull("品牌商标") Then
e.DataRow("商品全名") = dr("商品简名")
Else
e.DataRow("商品全名") = (dr("品牌商标") & dr("商品简名"))
End If
Else
If dr.IsNull("属性") Then
If dr.IsNull("品牌商标") Then
e.DataRow("商品全名") = (dr("型号") & dr("商品简名"))
Else
e.DataRow("商品全名") = (dr("品牌商标") & dr("型号") & dr("商品简名")) \'则如果品牌,商品?自定义分类全部有数据
End If
Else
If dr.IsNull("品牌商标") Then
e.DataRow("商品全名") = (dr("属性") & dr("型号") & dr("商品简名"))
Else
e.DataRow("商品全名") = (dr("品牌商标") & dr("属性") & dr("型号") & dr("商品简名")) \'则如果品牌,商品?自定义分类全部有数据
End If

End If
End If
Else
If dr.IsNull("型号") Then
If dr.IsNull("品牌商标") Then
e.DataRow("商品全名") =(dr("属性") & dr("商品简名"))
Else
e.DataRow("商品全名") = (dr("品牌商标") & dr("属性") & dr("商品简名"))
End If
Else
If dr.IsNull("品牌商标") Then
e.DataRow("商品全名") = (dr("属性") & dr("型号") & dr("商品简名"))
Else
e.DataRow("商品全名") = (dr("品牌商标") & dr("属性") & dr("型号") & dr("商品简名")) \'则如果品牌,商品?自定义分类全部有数据
End If
End If

End If
End If

Case "商品全名" \'如果列名是"商品全名"则执行下面的语句
If e.NewValue Is Nothing Then \'如果新录入的数据为空
e.DataRow("商品拼音码") = Nothing \'则对应行的商品拼音码录入空值
Else \'如果有录入,则执行下面的代码
e.DataRow("商品拼音码") = getpinyin(e.NewValue ,1) \'将信录入的内容以拼音码的的形式录入商品拼音码
End If

Case "品牌商标" , "属性" ,"型号"
dt = dr.DataTable
dt.DataCols("商品简名").RaiseDataColChanged()

End Select

 

--------以下是老师指点以后我修改过的代码,测试时可行的!

Dim dr As DataRow = e.DataRow
Select Case e.DataCol.name \'判断发生数据更改的列列名是不是我们要的列名
    Case "商品简名", "品牌商标", "属性", "型号"       
        e.DataRow("商品全名") = dr("品牌商标") & dr("属性") & dr("型号") & dr("商品简名")
\'则如果品牌,商品?自定义分类全部有数据              
    Case "商品全名" \'如果列名是"商品全名"则执行下面的语句
        If e.NewValue = Nothing Then \'如果新录入的数据为空
            e.DataRow("商品拼音码") = Nothing \'则对应行的商品拼音码录入空值
        Else \'如果有录入,则执行下面的代码
            e.DataRow("商品拼音码") = getpinyin(e.NewValue ,1) \'将信录入的内容以拼音码的的形式录入商品拼音码
        End If
End Select