Проблема с программной настройкой столбцов только для чтения в Telerik RadGrid
Вопрос
Я пытаюсь динамически сделать определенные столбцы доступными только для чтения во время выполнения, используя следующий код в моем обработчике Page_Load:
GridNumericColumn gncp = grid.MasterTableView.GetColumn("ActualProduction") as GridNumericColumn;
if (gncp != null)
{
gncp.ReadOnly = true;
}
Однако приведенный выше код работает только в том случае, если столбец является последним столбцом в таблице.Если я попытаюсь использовать предпоследний столбец или столбцы левее, команда Редактирования в строке больше не будет работать.Исключение не генерируется, и срабатывает команда EditCommand, но на этом участник останавливается.
Я подозреваю, что, возможно, я изменяю сетку в неправильном месте жизненного цикла страницы, но я действительно не хочу начинать искать нужное место методом проб и ошибок.Я привязываю свою сетку, используя grid_NeedDataSource
, не при загрузке страницы.Есть какие-нибудь идеи?
Решение
Попробуйте установить статус "Только для чтения" внутри обработчика предварительной отправки сетки.Я думаю, что это более подходящее место для этого.Подробнее о настройке столбцов здесь.
Член
Другие советы
это то, что я использую для ASP.NET MVC 3 Telerik Grid.У меня не было проблем с изменением порядка столбцов.Очевидно, что я использую движок Razor view engine.Я надеюсь, что это поможет.
@(Html.Telerik().Grid(Model)
.Name("catGrid")
.DataKeys(k => k.Add(o => o.cat_id))
.Columns(columns =>
{
columns.Bound(m => m.cat_id).ReadOnly(true).Visible(false);
columns.Bound(m => m.tenant_id).ReadOnly(true).Visible(false);
columns.Bound(m => m.date_added).ReadOnly(true).Visible(false);
columns.Bound(m => m.category_name).Title("Category Name").Width(350);
columns.Bound(m => m.status_cd).Title("Status").Width(150);
columns.Command(c =>
{
c.Edit();
c.Delete();
}).Width(250);
})
.DataBinding(b => b.Ajax()
.Select("AjaxGridSelect", "Category")
.Insert("GridInsert", "Category")
.Update("GridUpdate", "Category")
.Delete("GridDelete", "Category")
)
.ToolBar(t =>
{
t.Insert();
})
.Pageable(paging => paging.PageSize(20)
.Style(GridPagerStyles.NextPreviousAndDropDown)
.Position(GridPagerPosition.Both)
)
.Sortable()
.Filterable()
)