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窗体,对吗?您应该将其格式化为类似于代码的格式。并添加一些关于如何解决问题的解释。