2012-02-13 120 views
0

我想在我的DataGridView中分別設置每個DataGridViewComboBoxCell的項目(因爲每個組合框必須有不同的項目)。我用這個代碼來設置項目:設置DataGridViewComboBoxCell項目

foreach (DataGridViewRow row in grid.Rows) 
{ 
    ((DataGridViewComboBoxCell)row.Cells[1]).Items.Clear(); 
    foreach (Product prod in _ProductList) 
    { 
     ((DataGridViewComboBoxCell)row.Cells[1]).Items.Add(prod.Name); 
    } 
} 

調試我看到的DataGridViewComboBoxCell的項目設置正確,但是當我看到網格,組合技是空的。

進行不同的測試我意識到,如果我在表單加載後設置項目(例如在點擊事件中),項目顯示正常。

我應該如何在表單加載時加載項目?

+0

DataGridViewCombox有一個DataSource連接到它..我想知道是否將該特定項目的數據源設置爲string.Empty將解決您的問題..聽起來像一個DataBinding問題看這個鏈接可能選擇備用DataSource然後設置您試圖通過foreach循環設置的項目,你有http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcomboboxcell.aspx – MethodMan 2012-02-13 15:54:20

+0

這是另一個有用的鏈接,將解釋它甚至更多.. http://homepage.ntlworld.com/herring1/datagrid.html – MethodMan 2012-02-13 15:59:07

+0

或者我嘗試使用DataSource而不是在一段時間內設置項目。但問題依然如故。 如果我將DataGridViewComboBoxColumn設置爲DataGridViewComboBoxCell,則網格中的項目已正確填充,但此解決方案對我來說不可行,因爲每個單元格都有不同的項目。 – joaocarlospf 2012-02-13 17:31:58

回答

1

你在運行你的foreach循環的函數是什麼?如果在構造函數中,那可能爲時過早。嘗試將其移動到Form_Load或稍後運行的其他處理程序。

我回答了有關在列here中設置組合框當前值的問題,並且您可能遇到類似問題。我知道如果您在控件的生命週期中進行的時間足夠晚,請設置單元格的DataSource作品,因爲我已經做到了here

+0

完美!代碼在構造函數中..當我轉向OnLoad方法時,它完美地工作!這很好地解決了我的問題。非常感謝。 – joaocarlospf 2012-02-13 23:24:22

+0

我只是不明白爲什麼不可能在構造函數中填充組合框.. – joaocarlospf 2012-02-13 23:25:10

+0

WinForms C#控件只是用舊的Windows C API調用的標誌和消息以及瘋狂的包裝。在建築和裝載之間有各種各樣的東西發生在罩下,其中一件事可能是爲組合框選擇容器的構造。在構建之前,設置選項的調用(可能被調度爲帶有參數和東西的消息)只會被底層API忽略。這是基於Windows API模糊回憶的半分析解釋,不應用於生產代碼;) – 2012-02-14 14:53:24