jhun 发表于 2010-4-29 09:33:45

[已解决]求读取数据库然后写入ListView中的优化办法

本帖最后由 jhun 于 2010-4-29 10:32 编辑

我现在是写个循环,读一条写一条,可是数据量大的时候在ListView中显示的时间真的好长,然后想用_GUICtrlListView_AddArray 这个函数,可是问题来了,这个数组如何来创建呢,而且ListView有七列并与数组库的列对应,这里需要创建动态多维数组,并为其添加内容,由于学识浅薄,真的不知道如何下手了,希望您能帮助我,谢谢

水木子 发表于 2010-4-29 09:40:17

GUICtrlCreateListViewItem('数据1' & '|' & '数据2', $ListView1)

3mile 发表于 2010-4-29 09:44:12

#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <array.au3>
Opt('MustDeclareVars', 1)

$Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work

_Main()

Func _Main()
        Local $iI, $iTimer, $hListView

        ; Create GUI
        GUICreate("ListView Add Array", 400, 300)
        $hListView = GUICtrlCreateListView("", 2, 2, 394, 268)
        _GUICtrlListView_SetUnicodeFormat($hListView, False)
        GUISetState()

        ; Add columns
        _GUICtrlListView_AddColumn($hListView, "Items", 100)
        _GUICtrlListView_AddColumn($hListView, "SubItems 1", 100)
        _GUICtrlListView_AddColumn($hListView, "SubItems 2", 100)
        _GUICtrlListView_AddColumn($hListView, "SubItems 3", 100)
        _GUICtrlListView_AddColumn($hListView, "SubItems 4", 100)
        _GUICtrlListView_AddColumn($hListView, "SubItems 5", 100)
        _GUICtrlListView_AddColumn($hListView, "SubItems 6", 100)

        _GUICtrlListView_SetItemCount($hListView, 5000)
       
        ; One column load
        Local $aItems
        For $iI = 0 To UBound($aItems) - 1
                $aItems[$iI] = "Item " & $iI
        Next
        $iTimer = TimerInit()
        _GUICtrlListView_AddArray($hListView, $aItems)
        MsgBox(4160, "Information", "Load time: " & TimerDiff($iTimer) / 1000 & " seconds")

        _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($hListView)) ; items added with UDF function can be deleted using UDF function

        ; Four column load
        Dim $aItems
        For $iI = 0 To UBound($aItems) - 1
                $aItems[$iI] = "Item " & $iI
                $aItems[$iI] = "Item " & $iI & "-1"
                $aItems[$iI] = "Item " & $iI & "-2"
                $aItems[$iI] = "Item " & $iI & "-3"
                $aItems[$iI] = "Item " & $iI & "-4"
                $aItems[$iI] = "Item " & $iI & "-5"
                $aItems[$iI] = "Item " & $iI & "-6"
        Next
        $iTimer = TimerInit()
        _GUICtrlListView_AddArray($hListView, $aItems)
        MsgBox(4160, "Information", "Load time: " & TimerDiff($iTimer) / 1000 & " seconds")

        ; Loop until user exits
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
EndFunc   ;==>_Main

jhun 发表于 2010-4-29 10:02:54

回复 2# 水木子


    可能我表达的不太明白,我需要的是一次写入到ListView,而不是一条一条的写入,这样效率很慢,感谢您的回复

jhun 发表于 2010-4-29 10:06:29

回复 3# 3mile


    真的非常感谢,因为从来没有操作过多维数组,所以实在无法下手,您的例子让我非常受用。不过还有一个问题,不知能否烦请您解决一下,就是定义数组的问题,我现在是先读一次数据库得到数据条数,然后创建数组,然后读数据库并写入数组,不知道有没有更简便的方法,不管如何,再次感谢您

3mile 发表于 2010-4-29 11:02:24

本帖最后由 3mile 于 2010-4-29 11:07 编辑

建立一个TEST.INI文件,内容如下:
1=a,b,c,d,e,f,g
2=1,2,3,4,5,6,7
3=aa,bb,cc,dd,ee,ff,gg
4=aaa,bbb,ccc,ddd,eee,fff,ggg
5=aaaa,bbbb,cccc,dddd,eeee,ffff,gggg定义数组代码如下:#include <array.au3>
$ini=IniReadSection("test.ini","test")
$num=$ini
Local $arr[$num]
For $i=1 To $ini
        $sp=StringSplit($ini[$i],",")
        For $n=1 To $sp
                $arr[$i-1][$n-1]=$sp[$n]
        Next
Next
_ArrayDisplay($arr)

m765555 发表于 2011-3-12 13:26:57

不错,学习了

浪迹红客 发表于 2011-7-11 18:24:04

学习了,3mile

ye5022 发表于 2011-7-11 18:42:32

好方法!!
学习了!

qsy666888 发表于 2014-5-9 15:09:44

不错,学习了

moyixiang901 发表于 2014-5-30 20:55:20

学习!!!支持1

ak47gglllk 发表于 2014-9-12 11:35:37

学习了,虽然还不懂,感谢,感谢
页: [1]
查看完整版本: [已解决]求读取数据库然后写入ListView中的优化办法