首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ListView不刷新?

为什么ListView不刷新?
EN

Stack Overflow用户
提问于 2013-03-15 21:56:36
回答 3查看 8.6K关注 0票数 0

您好,我正在插入一个表,然后将所有内容读回ListView当我重新打开程序时,我看到我刚刚保存在我的ListView中的数据,但保存时这条记录没有显示在我的ListView中(尽管它保存在表中)。

我正在使用

代码语言:javascript
复制
 listView.Update() 

以及

代码语言:javascript
复制
 listView.Refresh() 

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

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

下面是我在Save方法的末尾使用的代码。基本上,这两个方法被调用

代码语言:javascript
复制
  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

谢谢你的帮忙

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-19 03:57:57

所以我动态地创建了ListView。问题是它不断地在彼此之上创建ListViews (内存泄漏),并且总是显示前一个。我创建了一个静态viewList,而不是动态的,这个问题已经解决了:d

票数 0
EN

Stack Overflow用户

发布于 2013-03-15 22:05:38

值得一看的是方法的作用。

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

Update :使控件在其工作区内重新绘制无效区域。

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

要使用表信息对其进行更新,请首先清除列表视图,然后重新执行最初填充它的过程。

票数 0
EN

Stack Overflow用户

发布于 2015-11-05 05:42:56

使用

代码语言:javascript
复制
For Each i As Windows.Forms.ListViewItem In ListView1.Items
   i.Remove()
Next

代替Clear

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15434287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档