2013-03-15 106 views
0

嗨,我插入表中,然后读取所有内容到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 

感谢您的帮助

+0

这两种方法只是重绘其当前数据的控制。您需要使用新数据重新填充它。 – CathalMF 2013-03-15 14:03:36

+0

用户单击保存(插入)后,我打电话两种方法。其中之一是重新构建listView,另一个是从表中读取新数据 – user1683987 2013-03-15 14:04:39

+0

显示代码可能会有所帮助.. – 2013-03-15 14:04:43

回答

0

所以我在动态创建ListView。问题在于它一直在创建ListViews(内存泄漏),它总是显示前一个。我创建了一个静态Viewlist产品与动态的一个问题得到解决:d

0

你必须设置一个新的DataSource并调用DataBind方法,尝试是这样的:

Public Sub RefreshListView() 

    listView.DataSource = 'get your reader here' 
    listView.DataBind() 

End Sub 

,并调用RefreshListView方法。

-2

使用

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

而不是Clear

+0

您应该格式化它以使其看起来像代码。并添加一些关于如何解决问题的解释。 – Teepeemm 2015-11-05 02:12:15