vb.net - 源更改后,Winforms ListBox控件未更新

标签 vb.net winforms binding datatable datasource

我在Form_Load事件中全局填充的Form类中有一个带有DataTable(DT)数据源的ListBox(LB)。

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


我敢肯定这是一个简单的问题,有一个简单的答案,但我似乎无法弄清楚。我已经尝试过Refresh()。我尝试过再次设置数据源。我读了这个StackOverflow问题Winforms listbox not updating when bound data changes,但是ResetBindings()在这种情况下似乎不是可用的方法。

*编辑。当他提到BindingContext时,我为Steve给出了答案。虽然,这导致我找到BindingContext(DT).EndCurrentEdit()来更新我的LB显示并保持选择。

最佳答案

尝试过了,就可以了.....

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  

关于vb.net - 源更改后,Winforms ListBox控件未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11266233/

相关文章:

c# - 如何在 WinForm 应用程序的 PictureBox 中更改现有 ToolTip 控件的文本?

.net - WPF 控件的 Binding.Mode=Default 的默认值是什么?

c# - 绑定(bind)到静态属性的一种方法失败

asp.net - 如果表单字段为空,如何将NULL插入数据库

c# - Vb.net 项目与 C# 流利的 nHibernate 映射项目

.net - 一个类中有多少对象太多了?

java - Spring MVC中init binder的目的是什么

vb.net - 如何在 vb 通用接口(interface)中创建一个返回实现类实例的方法?

c# - 在 Microsoft Visual C# 2010 Express 中运行 'Start Debugging' (F5) 时删除的按钮仍然显示

.net - 用 Visual Basic 编写的 Windows 窗体应用程序是否也需要 VB 运行时?