Foxtable(狐表)用户栏目专家坐堂 → 调用的目标发生了异常。 未将对象引用设置到对象的实例。


  共有3488人关注过本帖树形打印复制链接

主题:调用的目标发生了异常。 未将对象引用设置到对象的实例。

帅哥哟,离线,有人找我吗?
hc-mall
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:119 积分:918 威望:0 精华:0 注册:2018/8/30 9:53:00
调用的目标发生了异常。 未将对象引用设置到对象的实例。  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:119 积分:918 威望:0 精华:0 注册:2018/8/30 9:53:00
  发帖心情 Post By:2018/10/4 14:42:00 [只看该作者]

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:119 积分:918 威望:0 精华:0 注册:2018/8/30 9:53:00
  发帖心情 Post By:2018/10/4 17:33:00 [只看该作者]

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:119 积分:918 威望:0 精华:0 注册:2018/8/30 9:53:00
  发帖心情 Post By:2018/10/4 19:54:00 [只看该作者]

这样不行啊!只要有空值,最后结果就不显示!有方法可以把空值也可以合并进来吗?或者是空值项在合并的时候可以忽略不计吗?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/4 20:01:00 [只看该作者]

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
hc-mall
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:119 积分:918 威望:0 精华:0 注册:2018/8/30 9:53:00
  发帖心情 Post By:2018/10/4 20:03:00 [只看该作者]

就是有些时候“属性”或者“型号"是没有数据的!这样"商品全名"就无法显示了啊!有方法解决吗?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/4 20:09:00 [只看该作者]

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
hc-mall
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:119 积分:918 威望:0 精华:0 注册:2018/8/30 9:53:00
  发帖心情 Post By: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


 回到顶部