2014-03-02 82 views
0

我試圖將DataSource設置爲DataGridView的DataGridViewComboBoxColumn。首先,我試圖將數據源綁定到我的DataGridView,在那裏的BindingList是我的自定義類插件具有屬性名稱(字符串),ID(字符串)和相關性(列表)的列表:將DataSource設置爲DataGridViewComboBoxColumn

var bindingList = PluginsHandler.GetPlugins(); 
var source = new BindingSource(bindingList, null); 


pluginsDataGridView.AutoGenerateColumns = false; 
pluginsDataGridView.DataSource = source; 

pluginsDataGridView.Columns["pluginName"].DataPropertyName = "Name"; 
pluginsDataGridView.Columns["pluginID"].DataPropertyName = "Id"; 

所以我可以設置我的前兩列,但現在我想要將數據綁定到DataGridViewComboBoxColumn類型的第三列。我嘗試在DataBindingComplete事件上執行此操作:

private void pluginsDataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    for (int i = 0; i < pluginsDataGridView.Rows.Count; i++) 
    { 
     var comboCell = (DataGridViewComboBoxCell) pluginsDataGridView.Rows[i].Cells["pluginDependencies"]; 
     var entry = pluginsDataGridView.Rows[i].DataBoundItem as IPlugin; 
     comboCell.DataSource = entry.Dependencies;  
    } 

} 

令人遺憾的是,comboBox爲空。有趣的事情發生在我錯誤地把這些行代碼的第一個塊我張貼後:

var dependenciesColumn = (DataGridViewComboBoxColumn) pluginsDataGridView.Columns["pluginDependencies"]; 
    dependenciesColumn.DataPropertyName = "Dependencies"; 

然後結合似乎開始工作,我所看到的,有在組合框的條目,但是當我嘗試懸停鼠標在組合框上,我收到一個錯誤,說DataGridViewComboBoxCell值無效)。

我該如何讓它工作?

回答

0

不是分配每個ComboCell數據源,而是設置該列的DataSource。我假設PlugIn類的Dependencies屬性是List<string>

pluginsDataGridView.Columns["pluginDependencies"].DataSource = //list of dependencies 

你必須設置的依賴關係ComboBoxColumn的DataPropertyName獲取初始值。如果你沒有設置它,你就不會在應用程序加載時在列中看到任何值。

pluginsDataGridView.Columns["pluginDependencies"].DataPropertyName = "Dependencies" 

編輯:

你必須依賴於一個插件的列表。即多於一個值。通常,要從值列表中選擇一個值,請將列表與ComboBoxColumn關聯。使用標準ComboBoxColumn從列表中實現多個值的要求很困難。寫一個自定義CheckedComboBoxColumn,您可以在其中顯示和選擇多個值。

+0

是的,Plugin類的Dependencies屬性是'List '。問題是我想在每一行中有不同的依賴關係列表,這就是爲什麼我要爲每個ComboCell分配一個數據源。 無論如何,即使我嘗試按照您呈現的方式執行此操作,例如: 'var dependenciesColumn =(DataGridViewComboBoxColumn)pluginsDataGridView.Columns [「pluginDependencies」]; dependenciesColumn.DataSource = new string [] {「test1」,「test2」}; dependenciesColumn.DataPropertyName =「Dependencies」;' 問題仍然是相同的,並且與此代碼我得到相同的錯誤。 – krajol

+0

我想我得到你的問題。在答案中看到我的編輯。 – Junaith

相關問題