如何在不使用CustomRowCellEdit的情况下更改RepositoryItem?

时间:2018-11-26 16:04:14

标签: c# gridview devexpress

我想以不同于下面代码所示的方式更改RepositoryItem。 obsolete field CustomRowCellEditEventArgs.RowHandle中描述了这样做的动机。

private void GridView_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
{
    GridView view = sender as GridView;

    if (e.Column.FieldName == CONSTS_FIELD_NAME)
    {
        var val = (VAL_TYPE) view.GetRowCellValue(e.RowHandle, CONSTS_FIELD_NAME);
        if (val == VAL_VALUE)
            e.RepositoryItem = new RepositoryItem(); // setting new Repository Item
    }
}

所以我决定使用以下代码:

private void GridView_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
{
    GridView view = sender as GridView;

    if (e.Column.FieldName == CONSTS_FIELD_NAME)
    {
        var result = view.GetSelectedRows();
        var val = (VAL_TYPE) view.GetRowCellValue(result.First(), CONSTS_FIELD_NAME);
        if (val == VAL_VALUE)
            e.RepositoryItem = new RepositoryItem(); // setting new Repository Item
    }
}

还有使用其他事件来更改RepositoryItem的其他方法吗?

1 个答案:

答案 0 :(得分:1)

您提到的CustomColumnDataEventArgs的情况(为特定列提供未绑定数据)与GridView的编辑过程无关。触发CustomRowCellEdit事件时,所有行句柄均已计算。因此,没有动机避免采用第一种方法。
我唯一建议的建议是每次使用预定义的存储库项目,而不是每次创建新的存储库项目

void GridView_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e) {
    GridView view = sender as GridView;
    if(e.Column.FieldName == CONSTS_FIELD_NAME) {
        var val = (VAL_TYPE)view.GetRowCellValue(e.RowHandle, CONSTS_VAL);
        if(val == VAL_VALUE)
            e.RepositoryItem = repositoryItemForVAL_VALUE; 
    }
}

要使用特定的编辑器仅用于就地编辑,应处理CustomRowCellEditForEditing事件。

还请仔细阅读GridView.CustomRowCellEdit事件文档的“备注”部分,其中清楚地描述了此事件的工作方式。