2016-11-21 78 views
0

即时通讯使用listview在vb.net新的,但我设法显示来自mysql数据库的数据,但不知何故,我没有一个错误,但somethings奇怪的事情发生在我的列表视图。在表单加载中显示数据从数据库的列表视图

这是列表视图的第一个形象, enter image description here

但之后我点击退出按钮,然后再次打开它。发生这种情况 enter image description here

在列表视图双打每次我退出并重新打开它的列,但如果我关闭整个应用程序并重新运行它,它恢复正常,我点击每一次再翻一番退出并再次打开库存。

这是表单加载的代码。

Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Timer1.Enabled = True 
    Call LVWloader() 
    Call Locker(True) 
    Call objLocker(False) 


    With ListView1.Columns 
     .Add("Semen ID", 50, HorizontalAlignment.Center) 
     .Add("Bullname", 150, HorizontalAlignment.Center) 
     .Add("Breed", 150, HorizontalAlignment.Center) 
     .Add("Quantity", 50, HorizontalAlignment.Center) 
     .Add("Location", 50, HorizontalAlignment.Center) 
     .Add("Date Purchased", 50, HorizontalAlignment.Center) 

    End With 
    For i As Integer = 0 To ListView1.Columns.Count - 1 
     ListView1.Columns(i).Width = -2 
    Next i 
End Sub 

,这是装载代码

Public Sub LVWloader() 
    Dim myCommand As New MySqlCommand 
    Dim myReader As MySqlDataReader 
    Dim conn As MySqlConnection 
    conn = New MySqlConnection 
    conn.ConnectionString = "server = localhost;username= root;password= a;database= semenis" 
    Try 
     conn.Open() 
    Catch mali As MySqlException 
     MsgBox("connot establish connection") 
    End Try 

    ListView1.Items.Clear() 
    With myCommand 
     .Connection = conn 
     .CommandText = "Select * from inventory" 
    End With 
    myReader = myCommand.ExecuteReader 
    While myReader.Read() 
     With ListView1 
      .Items.Add(myReader(0)) 
      With .Items(.Items.Count - 1).SubItems 
       .Add(myReader.Item(1)) 
       .Add(myReader.Item(2)) 
       .Add(myReader.Item(3)) 
       .Add(myReader.Item(4)) 
       .Add(myReader.Item(5)) 

      End With 
     End With 
    End While 
End Sub 

我觉得代码错误来自对。新增列表视图,也许那里有做这另一种方式?

IM使用vb.net和MySQL数据库

感谢,

+0

为什么要使用'ListView'呢?为什么不填充一个'DataTable'并将其简单地绑定到'DataGridView'? – jmcilhinney

+0

我在其他表上使用datagridview,但在这一个我想我想更多地探讨如何正确使用listview, – User2341

+0

至于为什么发生这种情况,我猜这是因为你显示的是同一个实例多次,每次执行'Load'事件处理程序。如果你要在'Load'上构造'ListView',那么确保在关闭它之后处理这个实例,然后在每次你想显示它时创建一个新的实例。如果您发布打开此表单的代码,它可能会帮助我们。 – jmcilhinney

回答

2

之所以它的复制是因为你使用的是窗体的Load事件中加入栏,这是每一个形式是时候叫加载。您需要在表单设计器或表单的构造函数中添加列。

+0

或确保'Load'事件处理程序不会执行多次。也就是说,我看不出有什么理由不在设计师中添加列。 – jmcilhinney

+0

谢谢先生,我做了两个替代答案,1.是通过@jmcilhinney'使用语句'和2。我是否在表单设计器中添加了列。 :) – User2341

相关问题