2011-11-23 42 views
1

我有以下幾點:綁定組合框枚舉列表與另一桌的位置改的BindingSource

  • 地址表和表
  • 地址類型的枚舉列表中的BindingSource:0 =「郵寄「,1 =」Physical「,2 =」Shipping「等...

我想將combobox的數據源綁定到枚舉,因此它顯示」郵件「,」物理「等。然後我想要根據用戶對組合框的選擇來改變地址表的綁定源位置。

這是我到目前爲止有:

cbxAddressName.DataSource = New BindingSource(ApplicationEnums.GetEnumList(GetType(ApplicationEnums.CompanyAddressType)), Nothing) 
cbxAddressName.ValueMember = "Value" 
cbxAddressName.DisplayMember = "Key" 

cbxAddressName.DataBindings.Add("SelectedIndex", bgsAddress, "AddressType", False) 

它正確顯示枚舉在下拉列表,但不會改變的BindingSource的位置。

地址的表如下:

  • AddressID
  • 地址類型
  • 國家
  • 郵編
  • 國家

C#或VB.NET C頌歌會很棒,謝謝。

+0

填充其他組合框或datagridview的其他表格 – Postonoh

+0

該表格是地址表我使用bindingsource來填充其他文本框來編輯地址。 – Reafidy

+0

@postonoh,你的意思是? – Reafidy

回答

1

我假設您的表格將包含每個枚舉值最多一個地址。也就是說,零或一個郵寄,零或一個物理,零或一個運輸等。

沒有必要創建一個DataBinding(也不會工作)。也不需要爲組合框創建數據源。只需爲表格和組合框使用相同的BindingSource,它們就會自動同步。

public class Address 
{ 
    public AddressType AddressType { get; set; } 
    public string Street { get; set; } 
    // etc... 
} 

public enum AddressType 
{ 
    Business, 
    Home, 
    Other, 
    PostOfficBox, 
} 

演示這一點,一個ComboBox和的BindingSource添加到窗體,設置BingingSource數據源的地址類型,並添加一個文本框,並將其綁定到BindingSource的街財產。 然後把這個代碼在Form1構造函數:

{ 
    var addresses = new List<Address> { 
     new Address { AddressType = AddressType.Business, Street = "123 Commercial Ave" }, 
     new Address { AddressType = AddressType.Home, Street = "456 Suburbia Lane" }, 
     new Address { AddressType = AddressType.Other, Street = "789 Booty Blvd" }, 
     new Address { AddressType = AddressType.PostOfficBox, Street = "PO BOX 1000" }, 
    }; 

    tableBindingSource.DataSource = addresses; 

    comboBox1.DataSource = tableBindingSource; 
    comboBox1.DisplayMember = "AddressType"; 
} 

組合框將調用toString()的地址類型,所以你看到的將是枚舉值的名稱。如果你想看到不同的值(例如「郵政信箱」而不是「郵政郵箱」),那麼還有一點要做。我知道我之前已經寫了一個關於這個問題的答案,所以我不會在這裏重複一遍(問我或者搜索我的答案,如果你想的話)。

選擇組合框中的項目將更改其BindingSource的當前項目,並且綁定到該BindingSource的任何其他控件將被更新。

+0

太好了,謝謝! – Reafidy

相關問題