2012-06-29 49 views
3

我在Form_Load事件中全局填充的Form類中有一個DataTable(DT)DataSource的ListBox(LB)。Winforms列表框控件源更改後不更新

Private Sub frmEditPresets_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    DT.Columns.Add("DisplayText") 
    DT.Columns.Add("PresetID") 
    For Each TSI As ToolStripItem In Presets.DropDownItems 
     If TSI.Name.IndexOf("preset_") > -1 Then 
      DT.Rows.Add(TSI.Text, TSI.Name) 
     End If 
    Next 
    LB.DataSource = DT 
    LB.DisplayMember = "DisplayText" 
End Sub 

當我使用我的重命名按鈕。它更新菜單項和數據源,但列表框不會刷新,直到我單擊列表框中的另一個項目。

重命名代碼:

Private Sub btnRename_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRename.Click 
    Dim R As DataRowView = LB.SelectedItem 
    Dim S As String = InputBox("Preset Name", "Rename", R("DisplayText")) 
    If S.Trim.Length = 0 Then Exit Sub 
    If Presets.DropDownItems.ContainsKey(R("PresetID").ToString) Then 
     Presets.DropDownItems(R("PresetID").ToString).Text = S 
    End If 
    R("DisplayText") = S 
End Sub 

我敢肯定,這是一個簡單的回答一個簡單的問題,但我似乎無法弄清楚。我試過刷新()。我試過再次設置DataSource。我讀過這個StackOverflow問題Winforms listbox not updating when bound data changes但在這種情況下ResetBindings()似乎不是一個可用的方法。

*編輯。當他提到BindingContext時,我給了史蒂夫的答案。雖然,這導致我找到BindingContext(DT).EndCurrentEdit()更新我的LB顯示並保持選擇。

+0

許多控件無法知道什麼時候一個對象裏面的東西已經改變。如果我有'Foo'的BindingList,它可能知道我是否添加/刪除'Foo',但它不知道'Foo.Property'是否已經改變。爲了傳達這些變化,'Foo'需要實現INotifyPropertyChanged。類似的東西可能在這裏工作。 –

回答

1

試圖與這一點,它的工作原理.....

Private Sub btnRename_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRename.Click 
    Dim R As DataRowView = LB.SelectedItem 
    Dim S As String = InputBox("Preset Name", "Rename", R("DisplayText")) 
    If S.Trim.Length = 0 Then Exit Sub 
    If Presets.DropDownItems.ContainsKey(R("PresetID").ToString) Then 
     Presets.DropDownItems(R("PresetID").ToString).Text = S 
    End If 
    R("DisplayText") = S 
    BindingContext(DT).EndCurrentEdit() 
End Sub 
+1

Ooh .. BindingContext(DT).EndCurrentEdit()更新了我的顯示,並沒有取消選擇該項目:D – DontFretBrett

+0

很好,EndCurrentEdit更好。爲了這個問題的未來讀者的利益,我會更新我的答案與您的建議.... – Steve

+0

我不明白。你從哪裏得到DT? – PsychoData

相關問題