佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 994|回复: 13

关于datarow的特别运用

[复制链接]
发表于 24-2-2007 08:24 PM | 显示全部楼层 |阅读模式
在我的datatable里如果包含超过1个data row的话,以下的logic就不能用了
但我又需要为每一个datarow : Dim一个receipt_Items

请问我该如何做才好?

            For Each objDR In objDT.Rows

                Dim ritem1 As New receipt_Items
                ritem1.DN_ID = objDR("DN_ID")
                ritem1.DN_amount = objDR("amount")
                ritems.Add(ritem1)

            Next

举例说,如果我有两个data rows..那么就必须要

                Dim ritem1 As New receipt_Items
                ritem1.DN_ID = objDR("DN_ID")
                ritem1.DN_amount = objDR("amount")
                ritems.Add(ritem1)

                Dim ritem2 As New receipt_Items
                ritem2.DN_ID = objDR("DN_ID")
                ritem2.DN_amount = objDR("amount")
                ritems.Add(ritem2)
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 24-2-2007 09:16 PM | 显示全部楼层
我改良了以上的loop.. 但还是不行,问题可能出在Dim a(x) As receipt_Items (应该需要Dim a(x) As New receipt_Items)
但array是不可有new的

            For Each Utility.objDR In Utility.objDT.Rows

                Dim a(x) As receipt_Items
                Dim ritem1 As New receipt_Items

                a(x).DN_ID = Utility.objDR("DN_ID")
                a(x).DN_amount = Utility.objDR("amount")
                ritems.Add(a(x))

                x = x + 1

            Next
回复

使用道具 举报

发表于 25-2-2007 08:13 PM | 显示全部楼层
For Each objDR In objDT.Rows

                Dim ritem1 As New receipt_Items
                try
                   ritem1.DN_ID = objDR("DN_ID")
                   ritem1.DN_amount = objDR("amount")
                   ritems.Add(ritem1)
                 finally
                   ritem1.Free
                 end
            Next
回复

使用道具 举报

 楼主| 发表于 26-2-2007 02:15 AM | 显示全部楼层
1)首先,我并没有ritem1.Free这个选项
2)我的问题是,如果我有两个data rows..那么就必须要

                Dim ritem1 As New receipt_Items
                ritem1.DN_ID = objDR("DN_ID")
                ritem1.DN_amount = objDR("amount")
                ritems.Add(ritem1)

                Dim ritem2 As New receipt_Items
                ritem2.DN_ID = objDR("DN_ID")
                ritem2.DN_amount = objDR("amount")
                ritems.Add(ritem2)

    但datarow的数量可以是5..可以是10...也可以是1
那么我要如何运用loop,来应付这样的情形


[ 本帖最后由 一只优雅的猪 于 26-2-2007 02:29 AM 编辑 ]
回复

使用道具 举报

发表于 26-2-2007 09:26 AM | 显示全部楼层
有几个东西不明白...

1. 为什么 datarow 的数量超过一个的时候, 你的 looping 不能 work?
2. 你的 ritems 是什么来的? 怎么 declare?
3. 为什么你有超过一个 datarow 的时候, 你就自行要写两次 ritems.Add(...)? 用 loop 会出什么问题?
回复

使用道具 举报

 楼主| 发表于 26-2-2007 11:03 AM | 显示全部楼层
1) 因为每一个datarow我都需要assign一个新的receipt_Items给它

如果我才用以下的looping, 那么三个datarows的资料都只会进去ritem1而已

而我需要当我有三个datarows ("ABC" , "CDE" , "XYZ" ),
那么我就需要 Dim 三个receipt_Items ( ritem1, ritem2, ritem3 ),
变成 ritem1 = "ABC" , ritem2 = "CDE" , ritem3 = "XYZ"

2) ritems就像一个shoppingcart, 收集所有的物品 ( ritem1, ritem2, ritem3.... )

3) 问题就是出现在我不能随着我有的datarow数量来dim 我需要数量的 receipt_Items,
同时assign value进去对应的object....

            For Each objDR In objDT.Rows

                Dim ritem1 As New receipt_Items
                ritem1.DN_ID = objDR("DN_ID")
                ritem1.DN_amount = objDR("amount")
                ritems.Add(ritem1)

            Next
回复

使用道具 举报

Follow Us
发表于 26-2-2007 11:28 AM | 显示全部楼层
原帖由 一只优雅的猪 于 26-2-2007 11:03 AM 发表
1) 因为每一个datarow我都需要assign一个新的receipt_Items给它

如果我才用以下的looping, 那么三个datarows的资料都只会进去ritem1而已

而我需要当我有三个datarows ("ABC" , "CDE" ...


你的以下的 code 没问题:

            For Each objDR In objDT.Rows

                Dim ritem1 As New receipt_Items
                ritem1.DN_ID = objDR("DN_ID")
                ritem1.DN_amount = objDR("amount")
                ritems.Add(ritem1)

            Next

你的 ritem1 可以重复 dim, 没问题啊... 为什么你一定要知道确定的数量?
为什么你一定要 declare ritem1, ritem2.... ritem100? 有这个必要?
不过良好的习惯应该是:

            For Each objDR In objDT.Rows

                Dim ritem1 As New receipt_Items
                ritem1.DN_ID = objDR("DN_ID")
                ritem1.DN_amount = objDR("amount")
                ritems.Add(ritem1)
                Set ritm1 = Nothing
            Next
回复

使用道具 举报

 楼主| 发表于 26-2-2007 01:05 PM | 显示全部楼层
对! 就是有这个必要 declare ritem1..ritem2..ritem100
所以就是头疼在这里。。。

为什么一定要declare ritem1..ritem2..ritem100?

因为我需要将ritem1等拖去我的report (rdlc)
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 26-2-2007 01:29 PM | 显示全部楼层
Dim ritem1 As New receipt_Items

ritem1.DN_ID = "AAA-111"
ritem1.DN_amount = "testing"
ritems.Add(ritem1)

ritem1.DN_ID = "BBB-222"
ritem1.DN_amount = "testing"
ritems.Add(ritem1)

ritem1.DN_ID = "CCCC-222"
ritem1.DN_amount = "testing"
ritems.Add(ritem1)

如果我使用以上的code.. 那么最后display在report的就是这样

DN_ID        DN_Amount
CCCC-222     testing
CCCC-222     testing
CCCC-222     testing

除非我的code这样写

Dim ritem1 As New receipt_Items
Dim ritem2 As New receipt_Items
Dim ritem3 As New receipt_Items

ritem1.DN_ID = "AAA-111"
ritem1.DN_amount = "testing"
ritems.Add(ritem1)

ritem1.DN_ID = "BBB-222"
ritem1.DN_amount = "testing"
ritems.Add(ritem2)

ritem1.DN_ID = "CCCC-222"
ritem1.DN_amount = "testing"
ritems.Add(ritem3)

-----------------------------------
report才能display成这样。。。

DN_ID        DN_Amount
AAA-111      testing
BBB-222      testing
CCCC-222     testing
回复

使用道具 举报

发表于 26-2-2007 01:49 PM | 显示全部楼层
這樣的話,你有100個item就會dim 100個variable
我還是不明白你要做的是哈密碗糕
你會用到datagrid?.還是什麽,可以給個print screen 來看看嗎?
剛放完假,頭腦還沒有恢復思考能力
回复

使用道具 举报

发表于 26-2-2007 01:58 PM | 显示全部楼层
原帖由 一只优雅的猪 于 26-2-2007 01:29 PM 发表
Dim ritem1 As New receipt_Items

ritem1.DN_ID = "AAA-111"
ritem1.DN_amount = "testing"
ritems.Add(ritem1)

ritem1.DN_ID = "BBB-222"
ritem1.DN_amount = "t ...


你要 display 在那里?
即使要 display, 正确的做法应该是用你的 ritems, 不然它的作用是拿来做什么.

要显示出来... 其实很简单... 可以 loop 整个 ritems 呀.
你的 ritems(0), ritems(1)... ritems(x) 就是可以直接指回之前的 object 嘛.
回复

使用道具 举报

 楼主| 发表于 27-2-2007 11:41 AM | 显示全部楼层

回复 #11 goatstudio 的帖子

ritems 就好像一个篮子,存放所有将被display的项目(ritem1, ritem2, ritem3... and etc)

比如说我有三个datarows, 如果我只是有一个ritem1,
那么到最后在ritems这个篮子里就会有3个项目,如下:

1)ritem1
2) ritem1
3) ritem1

由于ritem1 = "12345"

那么display出来的result就会变成

1)12345
2) 12345
3) 12345
回复

使用道具 举报

 楼主| 发表于 27-2-2007 11:53 AM | 显示全部楼层
其实如果Array CAN be declared with New, 那么问题就应该解决了,因为我可以

            For Each objDR In objDT.Rows

                Dim ritem(x) As New receipt_Items
                ritem(x).DN_ID = objDR("DN_ID")
                ritem(x).DN_amount = objDR("amount")
                ritems.Add(ritem1)

            Next

问题就是不能,而我又不能Dim ritem(x) As receipt_Items   [ 没有new ]
回复

使用道具 举报

发表于 27-2-2007 04:24 PM | 显示全部楼层
你是用什么 REPORT?
CRYSTAL REPORT?

我想不是DATA ROW 的问题

你如何Setting report 的 source?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 29-8-2025 01:15 AM , Processed in 0.133142 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表