Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 为什么ListView不刷新?_Vb.net_Winforms_Listview - Fatal编程技术网

Vb.net 为什么ListView不刷新?

Vb.net 为什么ListView不刷新?,vb.net,winforms,listview,Vb.net,Winforms,Listview,嗨,我正在插入一个表,然后将所有内容读回一个列表视图,当我重新打开程序时,我看到了我刚刚保存在列表视图中的数据,但在保存时该记录没有显示在我的列表视图中(尽管它保存在表中) 我正在使用 listView.Update() 以及 listView.Refresh() 但它似乎不起作用。我只是使用选择查询从数据读取器读取数据,并将其存储在我的列表视图中,如下所示(正常工作) 唯一的问题是listView不会立即刷新,但在我关闭/打开程序时它会工作 下面是我在Save方法末尾使用的代码。基

嗨,我正在插入一个表,然后将所有内容读回一个
列表视图
,当我重新打开程序时,我看到了我刚刚保存在
列表视图
中的数据,但在保存时该记录没有显示在我的
列表视图
中(尽管它保存在表中)

我正在使用

 listView.Update() 
以及

 listView.Refresh() 
但它似乎不起作用。我只是使用
选择
查询从
数据读取器
读取数据,并将其存储在我的
列表视图
中,如下所示(正常工作)

唯一的问题是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。问题是它一直在互相创建列表视图(内存泄漏),并且总是显示前一个列表视图。我创建了一个静态视图列表而不是动态视图列表,问题得到了解决:D

使用

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

这两种方法不是清除,而是用控件的当前数据重新绘制控件。您需要用新数据再次填充它。在用户单击save(执行插入)之后,我立即调用两个方法。其中一个正在重新构建listView,另一个正在从表中读取新数据。显示代码可能会有所帮助。.发布最初用于填充listView的方法以及按“保存”后使用的代码。@user1683987您使用的是Windows窗体,对吗?您应该将其格式化为类似于代码的格式。并添加一些关于如何解决问题的解释。