我正在尝试使用我的Page_Load处理程序中的以下代码在运行时动态地使某些列只读:
GridNumericColumn gncp = grid.MasterTableView.GetColumn("ActualProduction") as GridNumericColumn;
if (gncp != null)
{
gncp.ReadOnly = true;
}
但是,上述代码仅在列是网格中的最后一列时才有效。如果我尝试使用倒数第二个或更远的列,则行上的“编辑”命令不再起作用。没有异常被抛出,并且EditCommand会触发,但这就是派对停止的地方。
我怀疑我可能会在页面生命周期的错误位置修改网格,但我真的不想通过反复试验来寻找正确的位置。我使用grid_NeedDataSource
绑定网格,而不是页面加载。有什么想法吗?
答案 0 :(得分:1)
尝试在网格的PreRender处理程序中设置只读状态。我认为这是更合适的地方。有关列自定义here的更多信息。
迪克
答案 1 :(得分:1)
这就是我用于ASP.NET MVC 3 Telerik Grid的内容。我没有遇到改变列顺序的问题。显然我正在使用Razor视图引擎。我希望这会有所帮助。
@(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()
)