2013-10-29 62 views
0

好吧,所以我得到了我大學工作的一部分幫助,但現在只需要一個步驟:顯示數據。現在,有問題的作業使用戶能夠通過ID號搜索產品,將其描述,每日,每週,每月租金費率以及庫存數量顯示在表單上的TextBox控件中,數據來自另一類中的字典。這也用於編輯目的(請參閱下面的註釋)。另外,在讀入和添加項目到Dictionary時,我也遇到了將ID變量添加到ComboBox集合中的問題,我相信這應該是一個簡單的修復,但我只是想幫助記憶它是什麼,就是這樣。顯示詞典數據

這裏是frmMain包含用於顯示按鈕的代碼的代碼(不要介意它看起來有多粗糙,請):

Imports System.IO 

Public Class frmMain 

Dim dItem As New Inventory 
Dim filePath = ofdOpenFile.FileName 

Public Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click 

    Me.Close() 
End Sub 

Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click 
    Dim ID As String = cboID.Text 
    Dim Desc As String = txtDescription.Text 
    Dim DRate As Double = txtDaily.Text 
    Dim WRate As Double = txtWeekly.Text 
    Dim MRate As Double = txtMonthly.Text 
    Dim Quantity As Integer = txtQuantity.Text 

    dItem.addItem(ID, Desc, DRate, WRate, MRate, Quantity) 
End Sub 

Private Sub btnRemove_Click(sender As Object, e As EventArgs) Handles btnRemove.Click 
    Dim ID As String = cboID.Text 

    dItem.removeItem(ID) 
End Sub 

Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click 
    ' Display data should go here 
End Sub 

Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    If ofdOpenFile.ShowDialog = Windows.Forms.DialogResult.OK Then 
     Dim FileInfo As New InventoryFile 
     FileInfo.RFile(filePath, dItem) 
     cboID.DataSource = dItem.returnKeys() 
    End If 
    End Sub 
End Class 

下面是我的字典類的代碼:

Public Class Inventory 

Public ItemInventory As New Dictionary(Of String, Item) 

Public Function iItem(ByVal key As String) As Item 
    Return ItemInventory(key) 
End Function 

Public Sub addItem(ByVal item As String, ByVal Desc As String, ByVal DRate As Double, ByVal WRate As Double, _ 
        ByVal MRate As Double, ByVal Quantity As Integer) 
    With ItemInventory 
     .Add(item, New Item(item, Desc, DRate, WRate, MRate, Quantity)) 
    End With 
End Sub 

Public Sub removeItem(ByVal item As String) 

    With ItemInventory 
     .Remove(item) 
    End With 
End Sub 

Public Function returnKeys() As String() 
    Dim Keys() As String 

    With ItemInventory 
     Keys = .Keys.ToList.ToArray 
    End With 

    Return Keys 
    End Function 
End Class 

我相信應該是這樣。我可以根據需要添加其他類,但除此之外,Dictionary有鍵和'Item',它是對Item類的引用,它包含需要顯示的附加數據(有一系列變量我的「添加」代碼應該回答「Item」類中的所有內容)。我應該如何引用字典才能顯示條目?

回答

1

好像有幾個問題在那裏......對於添加到組合中,有幾種方法。一種方法是將一個.ToString方法添加到返回Description的Inven類中。然後,當您將庫存項目添加到cbo時,您將添加OBJECTS,但cbo將使用ToString方法來顯示有價值的文本。

for each kvp as KeyValuePair In ItemInventory 
    theCbo.Items.Add(kvp.Value)  ' adding Inven OBJECTS to it 
next kvp 

另一個簡單的方法是使字典國會預算辦公室的數據源:

theCbo.DataSource = New BindingSource(ItemInventory, Nothing) 
theCbo.ValueMember = "Key" 
theCbo.DisplayMember = "Value" ' still relies on ToString 

由於它們是對象在cbo.Items,你可以很容易找到他們選擇一個:

thisID = cbo.SelectedItem.ID 

這可以傳遞到Inventory中新的DisplayItem方法,該方法將數據發佈到窗體控件:

dInven.Display(thisID) 

Friend Sub Display(theID as String) ' 
    If ItemInventory.ContainsKey(theID) Then 
     With theForm 
      .tbDescr.Text = ItemInventory(theId).Description 
      ... 
     End With 
    End If 
End Sub