将DataSource设置为DataGridViewComboBoxColumn

时间:2014-03-02 11:23:31

标签: c# winforms datagridview combobox

我正在尝试将DataSource设置为DataGridView的DataGridViewComboBoxColumn。首先,我正在尝试将数据源绑定到我的DataGridView,其中bindingList是我的自定义类插件的List,其属性为Name(string),Id(string)和Dependencies(List):

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值无效)。

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

不是为每个ComboCell分配数据源,而是设置列的DataSource。我假设PlugIn类的Dependencies属性是List<string>

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

您必须设置Dependencies ComboBoxColumn的DataPropertyName才能获取初始值。如果未设置,则在加载应用程序时,列中不会显示任何值。

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

编辑:

您有一个插件的依赖项列表。即,不止一个值。通常,要从值列表中选择一个值,请将列表与ComboBoxColumn相关联。使用标准ComboBoxColumn从列表中实现对多个值的要求很困难。编写自定义CheckedComboBoxColumn,您可以在其中显示和选择多个值。