C# 如何在数据绑定datagridview时编辑单元格值?

C# 如何在数据绑定datagridview时编辑单元格值?,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个对象列表(类型a),作为datagridview的数据源。类型A的属性是类型B中的对象列表 我想在单元格中显示类型B的列表。我想用对象B的Description属性来实现这一点。datagridview中显示的(对象B的)描述是逗号分隔的 要编辑单元格值,我必须挂接哪个事件?我不想将属性添加到我的对象中,因为接下来我将修改我的对象以获得UI表示,这是我不想要的。最后我找到了一些东西。我不知道这是否是正确的方法,但它现在对我有效。以下是我所做的: 1) 我已经将datagridview的V

我有一个对象列表(类型a),作为datagridview的数据源。类型A的属性是类型B中的对象列表

我想在单元格中显示类型B的列表。我想用对象B的
Description
属性来实现这一点。datagridview中显示的(对象B的)描述是逗号分隔的


要编辑单元格值,我必须挂接哪个事件?我不想将属性添加到我的对象中,因为接下来我将修改我的对象以获得UI表示,这是我不想要的。

最后我找到了一些东西。我不知道这是否是正确的方法,但它现在对我有效。以下是我所做的:

1) 我已经将datagridview的VirtualMode属性设置为true。 2) 我处理
CellValueRequired
事件。在此事件处理程序中,我检查列索引并设置值:

private void myDataGridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
    if (e.ColumnIndex == 3)
    {
        // _appointments is a member variable which is the datasource of the grid
        Appointment appointment = _appointments[e.RowIndex];

        IList<DisciplineType> disciplines = appointment.GetDisciplines();

        for (int i = 0; i < disciplines.Count; i++)
        {
            if (i > 0)
                e.Value += ", " + disciplines[i].Description;
            else
                e.Value += disciplines[i].Description;
        }
    }
}
private void myDataGridView\u CellValueRequired(对象发送方,DataGridViewCellValueEventArgs e)
{
如果(e.ColumnIndex==3)
{
//_Appoints是一个成员变量,它是网格的数据源
约会约会=_约会[e.RowIndex];
IList规程=appointment.getDistrictions();
for(int i=0;i0)
e、 值+=”,“+专业[i].说明;
其他的
e、 值+=专业[i]。说明;
}
}
}

希望这对其他人也有帮助。或者如果您有更好的解决方案,请告诉我。

我终于找到了一些。我不知道这是否是正确的方法,但它现在对我有效。以下是我所做的:

1) 我已经将datagridview的VirtualMode属性设置为true。 2) 我处理
CellValueRequired
事件。在此事件处理程序中,我检查列索引并设置值:

private void myDataGridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
    if (e.ColumnIndex == 3)
    {
        // _appointments is a member variable which is the datasource of the grid
        Appointment appointment = _appointments[e.RowIndex];

        IList<DisciplineType> disciplines = appointment.GetDisciplines();

        for (int i = 0; i < disciplines.Count; i++)
        {
            if (i > 0)
                e.Value += ", " + disciplines[i].Description;
            else
                e.Value += disciplines[i].Description;
        }
    }
}
private void myDataGridView\u CellValueRequired(对象发送方,DataGridViewCellValueEventArgs e)
{
如果(e.ColumnIndex==3)
{
//_Appoints是一个成员变量,它是网格的数据源
约会约会=_约会[e.RowIndex];
IList规程=appointment.getDistrictions();
for(int i=0;i0)
e、 值+=”,“+专业[i].说明;
其他的
e、 值+=专业[i]。说明;
}
}
}
希望这对其他人也有帮助。或者如果你有更好的解决方案,请告诉我