2012-10-23 62 views
3

我有這樣的組合框無法轉換詮釋爲int FO組合

BindingSource srd = new BindingSource(); 
srd.DataSource = llenar.Tables["cnae"]; 
CmbCnaePrin.DataSource = srd; 
CmbCnaePrin.DisplayMember = "cnae_descricao"; 
CmbCnaePrin.ValueMember = "cnae_id"; 

我希望加載這個

int cnaepr; 
DataTable dt3 = new DataTable(); 
dt3 = ifd.cnaeclas(cnaepr); 
txtCnaeC.Text = dt3.Rows[0][2].ToString(); 
txtCnaeSC.Text = dt3.Rows[0][3].ToString(); 

,但我不能轉換

cnaepr=Convert.ToInt32(CmbCnaePrin.SelectedValue) 

返回此錯誤無法投射「System.Data.DataRowView」類型的對象來鍵入「System.IConvertible」。

+0

什麼是雙重否定?這是否意味着你實際上可以轉換爲int?附: [請不要在標題中包含C#](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles) – Kiril

回答

4

嘗試在SelectedValue屬性調用toString():

cnaepr=Convert.ToInt32(CmbCnaePrin.SelectedValue.ToString()); 

的錯誤是非常正是它說; SelectedValue屬性被設計爲非常通用,因此它可以是任何可以在DataTable中找到的任何東西。其中大部分可能不是「可轉換」類型(實現IConvertible)。

+0

如果'CmbCnaePrin.SelectedValue'屬於' DataRowView'類型,使用'ToString()'方法將給你你帶有'System.Data.DataRowView'值的字符串,它仍然無法被解析爲'int'。 –

0

我能夠重現你的問題與smaple測試應用程序,我可以建議你兩種可能的解決方案。

您可以刪除BindingSource對象,該對象實際上只是DataTableComboBox之間的代理。

應用該解決方案,代碼應該是這樣的:

CmbCnaePrin.DataSource = llenar.Tables["cnae"]; 
CmbCnaePrin.DisplayMember = "cnae_descricao"; 
CmbCnaePrin.ValueMember = "cnae_id"; 

其餘的都可以保持不變,你應該在CmbCnaePrin.SelectedValue得到String對象。

替代解決方案(更新)

或者,你可以使用的BindingSource,但處理返回的CmbCnaePrin.SelectedValueDataRowView,以及情況下,當你直接獲得的價值。

應用該解決方案,代碼應該是這樣的:

DataRowView selectedValue = (CmbCnaePrin.SelectedValue as DataRowView); 
if (selectedValue != null) 
{ 
    cnaepr = Convert.ToInt32(selectedValue.Row["cnae_id"]); 
} 
else 
{ 
    cnaepr = Convert.ToInt32(CmbCnaePrin.SelectedValue); 
} 

其餘的都可以保持不變。

讓我知道這是否解決您的問題。

+0

第一行工作(沒有錯誤),第二行不行,連續錯誤。 –

+0

你寫道,第一個解決方案的工作,那麼解決你的問題呢?請注意我也更新了第二個,所以看看它。 –

+0

替代解決方案已更新,它現在應該可以正常工作。 –

0

嘗試在分配數據源之前設置組合框DisplayMember和ValueMember。

CmbCnaePrin.DisplayMember = "cnae_descricao"; 
CmbCnaePrin.ValueMember = "cnae_id"; 
CmbCnaePrin.DataSource = srd; 

我覺得這些分配設置DataSource後,意味着該組合框正試圖用一個DataTable的默認迭代器是一個DataRow(或DataRowView的一個數據視圖在這種情況下)。因此,在分配它們之前,它將自行設置ValueMember和DisplayMember。

相關問題