将 DataGridViewComboBoxColumn 绑定到嵌套列表

Posted

技术标签:

【中文标题】将 DataGridViewComboBoxColumn 绑定到嵌套列表【英文标题】:Bind DataGridViewComboBoxColumn to a nested List 【发布时间】:2016-03-29 10:21:15 【问题描述】:

我有一个具有以下属性的类:

Public string Name  get; set; 
Public string LastName  get; set; 
Public List<string> Jobs get; set; 

属性NameLastName 绑定到DataGridView,而我需要将Jobs 绑定到ComboBox 内的ComboBox

如果此人在 ComboBox 中有 1 份工作,则应仅显示数字 1。 如果此人有 2 个工作,则单击 ComboBox 时应显示为 1 和 2。

例如:

John Smith 1
Paul Mayer 1
           2

这是我添加ComboBoxColumn的方法:

private void AddComboBox()

    DataGridViewComboBoxColumn Jobs = new DataGridViewComboBoxColumn();
    foreach (var item in People)
    
        for (int i = 0; i < item.Jobs.Count; i++)
        
            Jobs.Items.Add(item.Jobs[i]);
        
    

但是这段代码使每个ComboBox 都相同,所以不是第一个ComboBox 有1,第二个ComboBox 有1-2,而是每个ComboBox 得到1-1-2。

有没有办法获得当前的ComboBox 来添加项目?不幸的是,因为它是一个ComboBoxColumn,所以我没有像单元格那样的Rows[i] 属性。

我也尝试了数据绑定,但Jobs 是一个列表,所以DataPropertyName 由于从列表到字符串的转换而引发错误。

谢谢大家。

【问题讨论】:

能否请您在数据绑定发生的地方发布您的代码? 【参考方案1】:

DataGridView 完成自己的源绑定后,您可以通过为每个ComboBox 提供源来使用数据绑定。

    完全删除AddComboBox,您将不再需要它。

    添加以下事件处理程序 dataGridViewJobs.DataBindingComplete += DataGridViewJobs_DataBindingComplete; 并在其中源每个 DataGridViewComboBoxCell

    private void DataGridViewJobs_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    
        string colName = "Jobs";
    
        if (dataGridViewJobs.Columns.Contains(colName))
        
            dataGridViewJobs.Columns.Remove(colName);
        
    
        DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();
        column.Name = colName;
        dataGridViewJobs.Columns.Add(column);
    
        foreach (DataGridViewRow row in dataGridViewJobs.Rows)
        
            var person = (Person)row.DataBoundItem;
            var cell = row.Cells[colName] as DataGridViewComboBoxCell;
    
            cell.DataSource = person.Jobs;
            cell.Value = person.Jobs[0];
        
    
    

【讨论】:

以上是关于将 DataGridViewComboBoxColumn 绑定到嵌套列表的主要内容,如果未能解决你的问题,请参考以下文章

如何将Ios文件上传到

Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等

如何将视频文件转换格式

sh 一个将生成CA的脚本,将CA导入到钥匙串中,然后它将创建一个证书并与CA签名,然后将其导入到

python怎么将0写入文件?

如何将CMD窗口背景改成透明?