2013-01-20 105 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