2013-01-20 72 views
0

我試圖改變ListBox項目的數據,當我做出更改並將它們提交給數據庫時。但是,爲ListBox.SelectedItem分配新值似乎不起作用,但如果我使用ListBox.Items(lstAlbums.SelectedIndex),則它似乎會更改我表單中的實際數據。ListBox.SelectedItem vs ListBox.Items(SelectedIndex)

我也通過GetHashCode測試了對象,它們看起來也是一樣的。 Boolean也是如果我試圖比較它們。有人知道爲什麼會發生這種情況嗎?以下是我的部分代碼:

Private Sub DataUpdatedCallback(ByVal updatedAlbum As Album) 
    ' (lstAlbums.Items(lstAlbums.SelectedIndex) Is _ 
    '       lstAlbums.SelectedItem) == TRUE 
    ' for some reason using lstAlbums.SelectedItem doesn't change the object data 
    lstAlbums.Items(lstAlbums.SelectedIndex) = updatedAlbum 
End Sub 
+0

您好先生,請嘗試閱讀http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title – spajce

回答

0

改爲使用SelectedValue。您的基礎對象通常有一個可用於此目的的關鍵字段。確保你已經相應地設置了ValueMember屬性。

+0

爲此目的?我需要更新整個項目對象,而不僅僅是一個由'ValueMember'設置的屬性。 – NullPointerException

+0

@NullPointerException:如果使用數據綁定,UI應自動更新。 ListBox並不是要直接更新數據。供用戶選擇。如果您的選擇更改,則重新分配整個數據源。如果你想在UI中顯示更新,你應該使用[DataGridView](http://msdn.microsoft.com/en-ca/library/system.windows.forms.datagridview.aspx)。 – Neolisk

0

提交給.SelectedItem的參考文獻必須是列表中的現有項目之一,您不能使用該屬性來修改.Item的內容。您當前的代碼

lstAlbums.Items(lstAlbums.SelectedIndex) = updatedAlbum

是正確的。

+0

你能更清楚嗎? '必須是列表中現有的項目之一' - 它是,但'Items(lstAlbums.SelectedIndex)'看起來完全一樣。所以如果是當前選定的項目對象可以重新分配的設計流程,我做錯了嗎? – NullPointerException

+0

'updatedAlbum'是否有可能是列表中對象的副本,而不是對實際列表項的引用? – SSS

+0

不,updatedAlbum絕對是一個相冊類的新實例 – NullPointerException