2012-12-03 37 views
0

我有一個Datagridview根據用戶在列表框中的選擇更改其內容。 DGV由2個組合框(國家,產品)和1個文本框(數量)組成。Datagridview綁定到對象 - 使新行顯示爲空

我創建了一個由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

編輯我的帖子。希望我得到了所有相關的行 – Gil

+0

您能否提供一份關於如何創建DGV組合框以及項目表的外觀的片段? – WozzeC

回答

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 

使用字符串是你得到了一個空白文本框的唯一途徑,我會建議你,如果你使用的數量爲整數有0默認(你應該)。你的構造函數需要改變這個:

Private Sub New() 
    _CountryID = 0    
    _ProductID = 0    
    _Quantity = "" 
End Sub 

在你的組合框列,你必須在上面添加一個空白項(我猜你手動添加),應該可以由具有空行項目的頂部。

+0

感謝您的快速回答! 事情是,這些組合框綁定到數據表,並且值不能是字符串 - 它們必須是整數。 – Gil

+0

所以你說的是你想要一個空白的文本框和空白的組合框。但是你已經設置了所有東西,以便不允許空白文本框和空白組合框。你在邏輯中看到問題了嗎? – WozzeC

+0

我的兩分錢,要麼完全更改設置,要麼決定默認狀態,您可以將其視爲空白。 – WozzeC

相關問題