为一个多列列表框设置不同的列宽

时间:2019-01-10 10:49:29

标签: .net vb.net listbox

我正在寻找一种在多列列表框中设置不同列宽的方法。第一个应为0,以便将其隐藏,第二个应为15,第三个为85,依此类推

我的目标是创建一个引用产品的列表框,用户可以从中单击以选择此类产品,然后使用按钮对该产品执行不同的操作

列表框从MySQL数据库获取数据

1 个答案:

答案 0 :(得分:0)

您可以创建一个类来存储数据。您可以根据需要添加任意多个属性,以匹配数据库表中的字段。我添加了一个自定义构造函数,以简化创建新产品时的设置属性。我已覆盖.ToString,因为列表框在要添加的对象上调用.ToString。

Public Class Product
    Public Property ProductName As String
    Public Property Price As Decimal
    Public Sub New(Name As String, ProductPrice As Decimal)
        ProductName = Name
        Price = ProductPrice
    End Sub
    Public Overrides Function ToString() As String
        Return ProductName
    End Function
End Class 

创建一个可变的表单级别列表,以保存您的产品数据列表。 检索数据并将每个记录存储在列表中。

Private lstProduct As New List(Of Product)
Private Sub GetData()
    Using cn As New MySqlConnection("Your connection string")
        Using cmd As New MySqlCommand("Select * From Products;", cn)
            cn.Open()
            Using dr As MySqlDataReader = cmd.ExecuteReader
                While dr.Read
                    Dim p As New Product(dr.GetString(0), dr.GetDecimal(1))
                    lstProduct.Add(p)
                End While
            End Using
        End Using
    End Using
End Sub

获取数据后,您可以将列表用作ListBox的.DataSource。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    GetData()
    ListBox2.DataSource = lstProduct
End Sub

现在,您具有列表框中所有可用的产品属性。<​​/ p>

Private Sub ListBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox2.SelectedIndexChanged
    Dim p As Product = DirectCast(ListBox2.SelectedItem, Product)
    Dim ProductPrice As Decimal = p.Price
    Debug.Print(ProductPrice.ToString)
End Sub