2009-10-03 110 views
3

我有2個組合框,每個綁定到同一個數據表,如下所示:淨組合框綁定問題

channelTypeCB.DataSource = SynergyData.ds.Tables["ChannelTypes"]; 
    channelTypeCB.DisplayMember = "channelType"; 
    channelTypeCB.ValueMember = "channelTypeID"; 
    channelTypeCB.BindingContext = new BindingContext(); 

    newSKChanTypeCB.DataSource = SynergyData.ds.Tables["ChannelTypes"]; 
    newSKChanTypeCB.DisplayMember = "channelType"; 
    newSKChanTypeCB.ValueMember = "channelTypeID"; 
    newSKChanTypeCB.BindingContext = new BindingContext(); 

當我點擊一個按鈕,插入一條記錄到數據庫中,我使用channelType.SelectedValue。 ..這是返回不正確的值。我有一種感覺,它與使用ComboBox排序(我在設計視圖中的控件的屬性中設置)有關。有沒有人遇到過這個問題?

這被編程用於使用C#WinForms應用程序

編輯:

例如,我的數據表存儲的值,如:

channelType channelTypeID 
Web    2 
Mailer   3 
Catalog   4 

這在組合框排序,當我選擇第一個項目(這將是「目錄」排序時)SelectedValue返回2,當我選擇第二個項目它返回3 ....我會有xpected「Catalog」返回4

+0

當你說「返回不正確的值」時,你是什麼意思? – 2009-10-03 02:24:47

+0

例如,我在組合框中選擇一個項目,並且channelType.SelectedValue確實沒有返回正確的一個......這會將數據插入到我的數據庫中,並將它們放入錯誤的類別(我三重檢查數字) – 2009-10-03 02:41:10

回答

5

MSDN ComboBox.Sorted

可能與此

試圖設置Sorted屬性 上的數據綁定控件引發 ArgumentException的。您必須使用底層數據模型對 數據進行排序。

(沒有得到任何雖然錯誤)

因此,而不是使用ComboBox.sort,我整理DataTable的默認視圖:

SynergyData.ds.Tables["ChannelTypes"].DefaultView.Sort = "channelType"; 

不服氣,這是最好的方法去它,但它的工作原理,現在選定的值返回正確的東西

+0

尼斯查找。這似乎是一個合理的方式去... – 2009-10-03 03:20:28

1

當您需要引用newSKChanTypeCB.SelectedValue(這是純粹基於您的控件名稱的總猜測)時,您可能會在代碼中引用channelTypeCB.SelectedValue。

+0

明確引用正確的一個(channelTypeCB.SelectedValue)...它就好像DisplayMember正在排序,但ValueMember不是 – 2009-10-03 02:47:49

+0

嘗試註釋掉「.BindingContext = New BindingContext();」線。確切地說,不知道這是做什麼,但它可能會刪除正常的BindingContext(一個工作的)與一個空的不工作。 – MusiGenesis 2009-10-03 02:50:04

+0

事實上,這正是它在做什麼......我會認爲它只在DisplayMember上排序? ... ValueMember是單獨排序的? – 2009-10-03 02:50:28

1

我會做到這一點是不同的:我將創建2個獨立的BindingSource的,每個根據自己DataSet,然後DataSource每個綁定控件剛創建的各個BindingSource

+0

剛剛更新我的代碼來使用這個,沒有修復selectedIndex問題,但感謝您的建議。 – 2009-10-03 03:17:20

+0

selectedValue *我的意思是 – 2009-10-03 03:20:24

0

問題是ComboBox的Sorted屬性,因爲您的數據來自DataTable。

使用Sorted屬性時,ComboBox僅組織DisplayMember並忽略其他數據,因爲它無法直接修改DataTable。例如:

從數據表作爲數據源的數據,而不排序

channelType channelTypeID ComboBoxDisplayMember ComboboxValueMember 
Web   2    Web      2 
Mailer   3    Mailer     3 
Catalog  4    Catalog     4 

現在Sorted屬性

channelType channelTypeID ComboBoxDisplayMemberSorted ComboboxValueMember 
Web   2    Catalog      2 
Mailer   3    Mailer      3 
Catalog  4    Web       4 

這個問題可以在數據庫中添加在查詢的末尾來解決:「ORDER BY字段名」 http://technet.microsoft.com/en-us/library/ms188385.aspx