我想以不同于下面代码所示的方式更改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的其他方法吗?
答案 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事件文档的“备注”部分,其中清楚地描述了此事件的工作方式。