[已解决]求读取数据库然后写入ListView中的优化办法
本帖最后由 jhun 于 2010-4-29 10:32 编辑我现在是写个循环,读一条写一条,可是数据量大的时候在ListView中显示的时间真的好长,然后想用_GUICtrlListView_AddArray 这个函数,可是问题来了,这个数组如何来创建呢,而且ListView有七列并与数组库的列对应,这里需要创建动态多维数组,并为其添加内容,由于学识浅薄,真的不知道如何下手了,希望您能帮助我,谢谢 GUICtrlCreateListViewItem('数据1' & '|' & '数据2', $ListView1) #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 回复 2# 水木子
可能我表达的不太明白,我需要的是一次写入到ListView,而不是一条一条的写入,这样效率很慢,感谢您的回复 回复 3# 3mile
真的非常感谢,因为从来没有操作过多维数组,所以实在无法下手,您的例子让我非常受用。不过还有一个问题,不知能否烦请您解决一下,就是定义数组的问题,我现在是先读一次数据库得到数据条数,然后创建数组,然后读数据库并写入数组,不知道有没有更简便的方法,不管如何,再次感谢您 本帖最后由 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) 不错,学习了 学习了,3mile 好方法!!
学习了! 不错,学习了 学习!!!支持1 学习了,虽然还不懂,感谢,感谢
页:
[1]