【问题标题】:Why is ListView not refreshing?为什么 ListView 不刷新?
【发布时间】:2013-03-15 13:56:36
【问题描述】:

您好,我正在插入表格,然后将所有内容读回 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

感谢您的帮助

【问题讨论】:

  • 这两种方法只是用当前数据重绘控件。您需要用新数据再次填充它。
  • 在用户单击保存(执行插入)之后,我正在调用两种方法。其中一个是重新构建 listView,另一个是从表中读取新数据
  • 显示代码可能会有所帮助..
  • 发布您最初用于填充 ListView 的方法以及您在按保存后使用的代码。
  • @user1683987 您使用的是 Windows 窗体,对吧?

标签: vb.net winforms listview


【解决方案1】:

值得看看方法是做什么的。

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

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

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

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

【讨论】:

    【解决方案2】:

    所以我正在动态创建 ListView。问题是它不断地在彼此之上创建 ListView(内存泄漏),并且总是显示前一个。我创建了一个静态视图列表与一个动态视图列表,问题已解决:D

    【讨论】:

      【解决方案3】:

      使用

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

      而不是Clear

      【讨论】:

      • 您应该对其进行格式化,使其看起来像代码。并添加一些关于如何解决问题的解释。
      猜你喜欢
      • 2012-11-11
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      相关资源
      最近更新 更多