查看: 994|回复: 13
|
关于datarow的特别运用
[复制链接]
|
|
在我的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) |
|
|
|
|
|
|
|

楼主 |
发表于 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 |
|
|
|
|
|
|
|
发表于 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) |
|
|
|
|
|
|
|

楼主 |
发表于 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? |
|
|
|
|
|
|
| |
本周最热论坛帖子
|