阻止ListView行在数据更新时消失

时间:2014-04-08 03:06:49

标签: vb.net listview

我有一个显示消息项的列表视图。当父窗口打开时,它启动一个计时器,检查每个xx数量以查看是否已发送任何新消息。然后清除listview控件并每次重建它(不确定这是否是最好的方法)。

无论如何,如果在重建listview时鼠标位于listview项目的顶部,则listview行为空白。但是,将鼠标从项目上移开并重新放回项目会重绘得很好。

构建我的列表视图的代码如下:

Private Sub LoadMessages()
    Dim QueryString As String

    Try
        lsvMail.Items.Clear()
        QueryString = "SELECT * FROM Mail WHERE recipient = '" & Current_User.DisplayName & "' ORDER BY sent DESC"
        Dim ExQry As New MySqlCommand(QueryString, MySQLConn)

        Dim da As New MySqlDataAdapter(ExQry)
        da.Fill(dsMessages, "Messages")
        Dim tempDT As DataTable = dsMessages.Tables("Messages")

        If dsMessages.Tables.Count > 0 And dsMessages.Tables(0).Rows.Count > 0 Then
            For x = 0 To (dsMessages.Tables(0).Rows.Count - 1)
                Dim lvi As New ListViewItem(tempDT.Rows(x)("is_replied").ToString)
                lvi.SubItems.Add(tempDT.Rows(x)("sender").ToString)

                If CBool(tempDT.Rows(x)("is_read")) = True Then
                    lvi.Font = RegularFont
                Else
                    lvi.Font = BoldFont
                End If

                If CBool(tempDT.Rows(x)("is_followup")) = True Then
                    lvi.ForeColor = Color.Red
                Else
                    lvi.ForeColor = Color.Black
                End If

                lvi.SubItems.Add(tempDT.Rows(x)("subject").ToString)
                lvi.SubItems.Add(tempDT.Rows(x)("sent").ToString)
                lvi.SubItems.Add(tempDT.Rows(x)("is_followup").ToString)
                lvi.Name = tempDT.Rows(x)("id").ToString
                lsvMail.Items.Add(lvi)
            Next
        End If
        da = Nothing
        tempDT = Nothing
        dsMessages.Clear()

    Catch ex As Exception
        CreateLog("Module: LoadMailMessages()" & vbNewLine & "Exception Error: " & ex.Message)
        MsgBox("Exception Error: " & ex.Message, MsgBoxStyle.Critical, "Module: LoadMailMessages()")
    End Try
End Sub

如上所述,我有一个只调用LoadMessages()例程的计时器事件。 我想要一个活着的'输入到消息窗口,以便在窗口打开时新列表将显示在列表视图中。

感谢任何帮助 - 谢谢。

1 个答案:

答案 0 :(得分:0)

尝试添加刷新:

    Next
    lvi.Refresh()
End If