为什么ListView不能刷新?

时间:2013-03-15 13:56:36

标签: vb.net winforms listview

您好我正在插入表格,然后将所有内容读回ListView当我重新打开程序时,我看到我刚刚保存在ListView中的数据,但此记录未显示在保存时我的ListView(虽然保存在表格中)。

我正在使用

 listView.Update() 

以及

 listView.Refresh() 

但它似乎不起作用。我只是使用SELECT查询从datareader读取数据并将其存储在我的listView中,如下所示(正常工作)

唯一的问题是listView没有立即刷新,但是当我关闭/打开程序时它可以正常工作

这是我在Save方法结束时使用的代码。基本上这两个方法被称为

  Private Sub SetColumns()
    Dim lstpenalty As New ListView()
    lstpenalty.Items.Clear()
    lstpenalty.Visible = True
    lstpenalty.Bounds = New Rectangle(New Point(390, 55), New Size(560, 379))
    lstpenalty.Name = "lstpenalty"
    lstpenalty.FullRowSelect = True


    lstpenalty.View = View.Details
    lstpenalty.GridLines = True


    lstpenalty.Items.Clear()


    lstpenalty.Columns.Add("a", 75)
    lstpenalty.Columns.Add("b", 70)
    lstpenalty.Columns.Add("c", 105)
    lstpenalty.Columns.Add("d", 98)
    lstpenalty.Columns.Add("e", 90)
    lstpenalty.Columns.Add("f", 105)
    Me.Controls.Add(lstpenalty)



    LoadPenaltyList(lstpenalty)

End Sub

Private Sub LoadPenaltyList(ByRef listView As ListView)

    Dim gDR As OracleDataReader
    Dim cmd As New OracleCommand
    Dim lstpenaltyview As New ListViewItem

    Try

        cnn.Connect_to_Oper_Agent()
        cmd.Connection = cnn.cnn

        listView.Items.Clear()


        cmd.CommandText = " select a," & _
                          "b, " & _
                          "c, " & _
                          "d," & _
                          "e," & _
                          "f" & _
                          " FROM myTable" & _
                          " commit"

        gDR = cmd.ExecuteReader()


        While gDR.Read

            lstpenaltyview = listView.Items.Add(Null_To_String(gDR("a")))
            lstpenaltyview.SubItems.Add(gDR("b"))
            lstpenaltyview.SubItems.Add(gDR("c"))
            lstpenaltyview.SubItems.Add(gDR("d"))
            lstpenaltyview.SubItems.Add(gDR("e"))
            lstpenaltyview.SubItems.Add(gDR("f"))

        End While

        listView.Update()



    Catch ex As Exception
        MsgBox("There was an error... -> " & ex.ToString)

    Finally
        cmd.Dispose()
        cnn.Close_Conn()

    End Try


End Sub

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

值得研究一下哪些方法。

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview_methods%28v=vs.71%29.aspx

更新:使控件重绘其客户区域内的无效区域。

刷新:强制控件使其客户区无效,并立即重绘自身和任何子控件。

要使用表信息更新它,请先清除列表视图,然后重做最初用于填充它的过程。

答案 1 :(得分:0)

所以我是动态创建ListView的。问题是它一直在创建ListViews(内存泄漏),它总是显示前一个。我创建了一个静态viewList而不是动态viewList,问题解决了:D

答案 2 :(得分:-2)

使用

For Each i As Windows.Forms.ListViewItem In ListView1.Items
   i.Remove()
Next

而不是Clear