Как изменить RepositoryItem без использования CustomRowCellEdit? - PullRequest
0 голосов
/ 26 ноября 2018

Я хотел бы изменить RepositoryItem иначе, чем показано в коде ниже.Мотивация для этого описана в устаревшем поле 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 голосов
/ 27 ноября 2018

Ситуация с 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 документация о событии, в которой четко описано, как работает это событие.

...