我有一个Datagridview,它根据用户在listBox中所做的选择来更改其内容。 DGV由2个组合框(国家,产品)和1个文本框(数量)组成。
我创建了一个由3个整数组成的类。 此类用作列表类型,它是DGV的数据源。 还有另一个包含先前列表的列表,所以我有一个数据源列表。
DGV的数据源是一个BindingSource,每当触发listBox的SelectedIndex时它就会发生变化。
每当向DGV添加新行时,都会出现问题: 我使用BindingSource.AddNew来调用类的构造函数,但它必须为类中的每个项目赋值。这样,每当我点击DGV中的任何单元格时,我都不会得到空行。 此外,当BS更改然后返回时,会添加另一行。
我想得到的是一个空行 - 空组合框和文本框。
感谢您的帮助!
班级:
Public Class PoList
Private _CountryID As Integer
Private _ProductID As Integer
Private _Quantity As Integer
Public Sub New(ByVal CountryID As Integer, ByVal ProductID As Integer, ByVal Quantity As Integer)
_CountryID = CountryID
_ProductID = ProductID
_Quantity = Quantity
End Sub
Private Sub New()
_CountryID = 1
_ProductID = 2
_Quantity = Nothing
End Sub
Public Property CountryID() As Integer
Get
Return _CountryID
End Get
Set(ByVal value As Integer)
_CountryID = value
End Set
End Property
Public Property ProductID() As Integer
Get
Return _ProductID
End Get
Set(ByVal value As Integer)
_ProductID = value
End Set
End Property
Public Property Quantity() As Integer
Get
Return _Quantity
End Get
Set(ByVal value As Integer)
_Quantity = value
End Set
End Property
Public Shared Function CreateNewPoList() As PoList
Return New PoList
End Function
End Class
Private Sub List_AddRow(ByVal sender As Object, ByVal e As AddingNewEventArgs) Handles AllListBindingSource.AddingNew
e.NewObject = PoList.CreateNewPoList
End Sub
创建新的内部列表:
AllList.Add(New List(Of PoList))
AllListBindingSource.AddNew()
AllListBindingSource.DataSource = AllList(TableCounter)
AddPoDetails.DataSource = AllListBindingSource
SelectedIndexChanged事件:
AllListBindingSource.DataSource = AllList(AddPoList.SelectedIndex)
AddPoDetails.DataSource = Nothing
AddPoDetails.DataSource = AllListBindingSource
答案 0 :(得分:0)
是的,让我们看看我是否可以帮到你。 正如我解释它,你有一个列表填充列表。这些列表不知道自己的身份,并且基于列表中的当前索引。
首先我不会使用Bindingsource.AddNew我会将新对象直接添加到列表中。
AllList(TableCounter).Add(New Polist())
通过使用您不太确定的事件,您可以确切地知道已创建了多少对象。 要刷新列表,请执行以下操作:
AllListBindingSource.ResetBindings(true)
这将使用新行更新您的DGV。
现在您需要重新构建类,因为在创建新Polist时,您将值设置为空。这会使你的桌子崩溃。你需要做的是:
Private _Quantity As String
Public Property Quantity() As String
Get
Return _Quantity
End Get
Set(ByVal value As String)
_Quantity = value
End Set
End Property
使用字符串是获取空白文本框的唯一方法,如果您使用Quantity作为整数(我应该使用),我建议您默认为0。您的构造函数需要更改为:
Private Sub New()
_CountryID = 0
_ProductID = 0
_Quantity = ""
End Sub
在你的组合框列中,你必须在顶部添加一个空白项目(我猜你手动添加它们),应该可以在项目顶部添加一个空行。