2011-09-02 68 views
4

我從嵌入在一個DataGridView一個datagridviewcombobox(下拉菜單)的控制選擇一個新的值時,遇到一個異常。組合框由BindingSource填充,該組件填充了我的類的實例。我可以正確顯示菜單中的選項,然後選擇一個,但將焦點更改爲新控件(提交我猜測的更改)會導致出現異常:無效從System.String轉換爲myclass。堆棧跟蹤(如果即時通訊使用這個詞右)來源是C#的Winforms DatagridviewCombobox例外串不能被轉換爲

System.Windows.Forms.DataGridView.PushFormattedValue 級聯到 System.Convert.DefaultToType

更明確的解釋是低於(抱歉它很長,但我想使它可重現):

我有一個空的類叫做Occupant,沒有任何屬性(問題存在,當Occupant也有一個字符串Name屬性,所以不是這樣)。我有一個名爲OccupantSource的BindingSource,它的DataSource指向Occupant。

我也有一個叫Car的類,有一個叫做Driver的Occupant屬性。

在我的Form_Load(),我兩次打電話OccupantSource.AddNew(),並呼籲立即CarSource.AddNew()。

我有一個DataGridView控制,其數據源是CarSource(BindingSource的由汽車的)。 DGV有一列,在CarSource中顯示汽車的駕駛員屬性。它是一個DataGridViewComboBoxColumn,並將DataPropertyName設置爲驅動程序。

所以,我想要的是展車的排在DataGridView,與一列是一個組合框,我可以下拉列表,選擇從乘客的現有實例的驅動器。但我得到了例外。

這是我誤解的東西嗎?你不能使用類的實例來填充DataGridViewComboBox嗎?

+0

可能是從組合框顯示的選定項目/當前項目作爲對象來到,但在內部它可能是一個字符串。焦點不集中的是內部調用嘗試轉換的提交事件。 – Zenwalker

+0

什麼是您收回的Exception.Message? – MoonKnight

+0

我忘了提及,有一個叫做CarSource的BindingSource,而DGV的ComboBoxBolumn的數據源被設置爲OccupantSource。該項目中沒有字符串,並且異常消息在這裏:http://img508.imageshack.us/img508/2586/unledbfv.jpg – Moz

回答

5

我遇到了一模一樣的問題,被抓我的頭,用我的谷歌福爲試圖解決幾個小時。這個鏈接最終給了我一個很好的解釋。 http://www.pcreview.co.uk/forums/datagridview-combobox-column-error-listing-objects-t2344961.html

我修正它的方法是改變DisplayMember。 我在返回'this'的類上引用了'Self' - 我將它用於DisplayMember和ValueMember,認爲它只是從DisplayMember ToString()屬性。

讀你的解釋,你可能沒有DisplayMember和ValueMember一套呢?如果是這種情況,請嘗試正確設置它們(並且不要對顯示成員使用'this'的引用!),它可能會修復它。

+0

謝謝!你比我發現的還有更好的解釋。 –

相關問題