我有一个具有以下属性的类:
Public string Name { get; set; }
Public string LastName { get; set; }
Public List<string> Jobs{ get; set; }
属性Name
和LastName
绑定到DataGridView
,而我需要将Jobs
绑定到ComboBox
内的DataGridView
ComboBox
中有一个作业,则应该只显示数字1。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,而是每个{{1}得到1-1-2 }。
有没有办法让当前ComboBox
添加项目?不幸的是,由于它是ComboBoxColumn
,我不会像细胞一样拥有Rows[i]
属性。
我也尝试过数据绑定,但Jobs
是一个列表,因此DataPropertyName
因列表转换为字符串而引发错误。
感谢所有人。
答案 0 :(得分:0)
在ComboBox
完成自己的源绑定后,您可以通过寻找每个DataGridView
来使用数据绑定。
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];
}
}