hur.cn - 华软网

 热门搜索

关于用listview对物品进行统计的一个问题

  作者:未知    来源:网络    更新时间:2019/7/30
我想对datawindow里的相同项举行合并,统计总数,做法是掏出datawindow里的每一项和listview里的每一项举行对照,如果名称和规格相同,就把数目加进listview里,如果名称和规格有一个不同,就在listview里重新增加一行,用了两层循环,可是结果遇到相同项就停止统计。而且在对datawindow里的数据举行重新排序后,又会获得不同的结果,但照旧不完整的结果。改了很多遍,不知道是那里犯错了。我是初学者,还请高手指点,不尽谢谢感动!
详细代码以下:
lv_1.AddColumn("文具名称",Center!,400)
lv_1.AddColumn("规格",Center!,500)
lv_1.AddColumn("单位",Center!,200)
lv_1.AddColumn("数目",Center!,200)
int j,i
string ls_mingcheng,ls_guige,ls_danwei,ls_kucun,ls_vmingcheng,ls_vguige,ls_vkucun,ls_vdanwei

boolean m=false
for j=1 to dw_1.rowcount()
    ls_mingcheng =dw_1.getitemstring(j,"文具名称")
    ls_guige = dw_1.getitemstring(j,"规格")  
    ls_danwei = dw_1.getitemstring(j,"单位")
    ls_kucun = dw_1.getitemstring(j,"数目")
    for i=1 to lv_1.totalitems()
        lv_1.getitem(i,1,ls_vmingcheng)
        lv_1.getitem(i,2,ls_vguige)
        lv_1.getitem(i,3,ls_vdanwei)
        lv_1.getitem(i,4,ls_vkucun)
        if  ls_mingcheng=ls_vmingcheng and ls_guige=ls_vguige then
   m=true
   ls_vkucun = string (integer(ls_kucun) + integer(ls_vkucun))
messagebox("",ls_vkucun)
   lv_1.setitem(i,4,ls_vkucun)
   exit
        else
   m=false
        end if
    next
    if m=false then
       lv_1.AddItem (ls_mingcheng,j)
       lv_1.setitem(j,2,ls_guige)
       lv_1.setitem(j,3,ls_danwei)
       lv_1.setitem(j,4,ls_kucun)
    end if
next
------华软网友回答------
数据窗口里的相同项合并
dw_1.setsort()
dw_1.sort()
dw_1.setfilter("A <> A[-1] or getrow() = 1 ")
dw_1.filter()
dw_1.rowocunt() //总数

这样,dw_1中就不存留相同的A了
------华软网友回复------
数据窗口里的相同项合并
dw_1.setsort('A A')
dw_1.sort()
dw_1.setfilter("A <> A[-1] or getrow() = 1 ")
dw_1.filter()
dw_1.rowocunt() //总数

这样,dw_1中就不存留相同的A了
=================
上一条忘记些排序条件了

------华软网友回复------
数据窗口时的SQL语句按 
select sum(数目)
from table_name
group by 名称,规格
就方便多了
------华软网友回复------
楼主的方法能够说是最原始的方法.
 先说你剧本中的问题, exit 这一句话就退出循环了,如果要跳出本轮循环,应该用continue.

灵活变通一下,就出现了楼上两位说的方法。条条大道都能走到的。呵呵。
------华软网友回复------
建義寫個SQL來統計是最方便的,把SQL放到datastore中,然後從datastore中取數據
------华软网友回复------
谢谢大家!大家说的方法都很好,对我很有启发,不过我想保留datawindow里的原始数据,详细说来,是在dw_1里显示增加文具的信息,在dw_2里显示取用文具的信息,然后在listview里统计库存量,目前先实现增加显示库存,我按照柳荫凉的方法把exit改成了continue,不过照旧不能实现数目累加。不知道该怎么办?
------华软网友回复------
发现是这里犯错了
if m=false then
       lv_1.AddItem (ls_mingcheng,j)
       lv_1.setitem(j,2,ls_guige)
       lv_1.setitem(j,3,ls_danwei)
       lv_1.setitem(j,4,ls_kucun)
    end if
改成这样就好了
if m=false then
       lv_1.AddItem (ls_mingcheng,lv_1.totalitems()+1)
       lv_1.setitem(lv_1.totalitems(),2,ls_guige)
       lv_1.setitem(lv_1.totalitems(),3,ls_danwei)
       lv_1.setitem(lv_1.totalitems(),4,ls_kucun)
    end if



     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。