将 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;
属性Name
和LastName
绑定到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 绑定到嵌套列表的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等