listview虚拟列表加载上万数据并进行统计

来源:互联网 发布:movist for mac 官网 编辑:程序博客网 时间:2024/05/19 00:10

 listview虚拟列表加载上万数据并进行统计

 

这几天在搞数据统计,就一个收入列表,一个月下来有上万条数据,要列表出来,晕菜菜,原来用FOR NEXT

KAO,他一千多条就给我加了几分钟,真是神仙啊~~~~~~

干脆不要了,换成虚拟列表的形式算了,与其说统计,应该说成是向DATATABLE新增加一行自行统计的信息并显示出来,呵呵~

以下附代码:

 
  1. Private Sub listView1_RetrieveVirtualItem(ByVal sender As ObjectByVal e As RetrieveVirtualItemEventArgs) Handles ListView1.RetrieveVirtualItem
  2.         Dim myvalues(9) As String
  3.         With EchoDS.Tables("收入报表").Rows(e.ItemIndex)
  4.             myvalues(0) = .Item("收费时间").ToString
  5.             myvalues(1) = .Item("用户编号").ToString
  6.             myvalues(2) = .Item("用户名称").ToString
  7.             myvalues(3) = .Item("水费").ToString
  8.             myvalues(4) = .Item("附加费").ToString
  9.             myvalues(5) = .Item("滞纳金").ToString
  10.             myvalues(6) = .Item("总金额").ToString
  11.             myvalues(7) = .Item("收费人员").ToString
  12.             myvalues(8) = .Item("收费方式").ToString
  13.             myvalues(9) = .Item("发票号码").ToString
  14.         End With
  15.         e.Item = New ListViewItem(myvalues)
  16.         If e.ItemIndex Mod 2 = 0 Then
  17.             e.Item.BackColor = Color.AliceBlue
  18.         ElseIf EchoDS.Tables("收入报表").Rows.Count - e.ItemIndex = 1 Then
  19.             e.Item.BackColor = Color.AntiqueWhite
  20.         End If
  21.     End Sub
  22.     Private Sub SimpleButton1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles SimpleButton1.Click
  23.         If ListView1.Items.Count > 0 Then
  24.             ListView1.Clear()
  25.         End If
  26.         EchoDS.Reset()
  27.         Dim up, down As String
  28.         up = DateTimePicker1.Text
  29.         down = DateTimePicker2.Text
  30.         Dim downday, upday As String
  31.         upday = Replace(Replace(Replace(up, "年""-"), "月""-"), "日""")
  32.         downday = Replace(Replace(Replace(down, "年""-"), "月""-"), "日""")
  33.         If DateDiff("d", upday, downday) < 0 Then
  34.             MsgBox("上期时间不能小于本期时间!", MsgBoxStyle.Exclamation)
  35.             Return
  36.         End If
  37.         Dim wait As New Wait
  38.         wait.Label1.Text = "正在加载数据,请稍候..."
  39.         wait.ProgressBar1.Visible = False
  40.         wait.Show()
  41.         wait.Refresh()
  42.         Dim sql As String
  43.         sql = "SELECT 水费收入表.收费时间, 水费收入表.用户编号, 水费收入表.用户名称, 水费收入表.水费, 水费收入表.附加费, 水费收入表.滞纳金, 水费收入表.总金额, 系统用户.用户名称 AS 收费人员, 水费收入表.收费方式, 水费收入表.发票号码 FROM 水费收入表 INNER JOIN 系统用户 ON 水费收入表.收费员 = 系统用户.id WHERE (水费收入表.收费时间 > CONVERT(DATETIME, '" & upday & " 00:00:00', 102)) AND (水费收入表.收费时间 < CONVERT(DATETIME, '" & downday & " 23:59:59', 102))"
  44.         Select Case ComboBox2.Text.Trim
  45.             Case "全部"
  46.                 sql = sql
  47.             Case Else
  48.                 sql += " AND 水费收入表.收费方式 = '" & ComboBox2.Text.Trim & "'"
  49.         End Select
  50.         Select Case ComboBox1.Text.Trim
  51.             Case "全部"
  52.                 sql = sql
  53.             Case Else
  54.                 Dim j As Object = ComboBox1.Text.Trim
  55.                 j = Split(j, "、")
  56.                 sql += " AND 水费收入表.收费员 = " & j(0) & ""
  57.         End Select
  58.         sql += " ORDER BY 水费收入表.收费时间 DESC"
  59.         sqlread(sql, "收入报表")
  60.         sql = "SELECT sum(水费) as 总水费金额,sum(附加费) as 总附加费,sum(滞纳金) as 总滞纳金,sum(总金额) as 总总金额 FROM 水费收入表 WHERE (收费时间 > CONVERT(DATETIME, '" & upday & " 00:00:00', 102)) AND (收费时间 < CONVERT(DATETIME, '" & downday & " 23:59:59', 102))"
  61.         Select Case ComboBox2.Text.Trim
  62.             Case "全部"
  63.                 sql = sql
  64.             Case Else
  65.                 sql += " AND 收费方式 = '" & ComboBox2.Text.Trim & "'"
  66.         End Select
  67.         Select Case ComboBox1.Text.Trim
  68.             Case "全部"
  69.                 sql = sql
  70.             Case Else
  71.                 Dim j As Object = ComboBox1.Text.Trim
  72.                 j = Split(j, "、")
  73.                 sql += " AND 收费员 = " & j(0) & ""
  74.         End Select
  75.         sqlread(sql, "补")
  76.         Dim dr As DataRow = EchoDS.Tables("收入报表").NewRow()
  77.         dr("用户名称") = "合计:"
  78.         dr("水费") = EchoDS.Tables("补").Rows(0).Item("总水费金额")
  79.         dr("附加费") = EchoDS.Tables("补").Rows(0).Item("总附加费")
  80.         dr("滞纳金") = EchoDS.Tables("补").Rows(0).Item("总滞纳金")
  81.         dr("总金额") = EchoDS.Tables("补").Rows(0).Item("总总金额")
  82.         EchoDS.Tables("收入报表").Rows.Add(dr)
  83.         EchoDS.Tables("补").Reset()
  84.         If EchoDS.Tables("收入报表").Rows.Count <= 0 Then
  85.             wait.Dispose()
  86.             ListView1.VirtualMode = False
  87.             MsgBox("暂无当前时间段的收入报表!", MsgBoxStyle.Information)
  88.             Return
  89.         Else
  90.             ListView1.VirtualMode = True
  91.             ListView1.VirtualListSize = EchoDS.Tables("收入报表").Rows.Count
  92.             ListView1.Columns.Add("交费时间")
  93.             ListView1.Columns.Add("用户编号")
  94.             ListView1.Columns.Add("用户名称")
  95.             ListView1.Columns.Add("水费金额")
  96.             ListView1.Columns.Add("附加费")
  97.             ListView1.Columns.Add("滞纳金")
  98.             ListView1.Columns.Add("总金额")
  99.             ListView1.Columns.Add("收费员")
  100.             ListView1.Columns.Add("交费方式")
  101.             ListView1.Columns.Add("发票号码")
  102.             ListView1.Columns.Item(0).Width = 150
  103.             ListView1.Columns.Item(1).Width = 80
  104.             ListView1.Columns.Item(2).Width = 150
  105.             ListView1.Columns.Item(3).Width = 80
  106.             ListView1.Columns.Item(4).Width = 80
  107.             ListView1.Columns.Item(5).Width = 80
  108.             ListView1.Columns.Item(6).Width = 80
  109.             ListView1.Columns.Item(7).Width = 80
  110.             ListView1.Columns.Item(8).Width = 80
  111.             ListView1.Columns.Item(9).Width = 150
  112.         End If
  113.         wait.Dispose()
  114.     End Sub