1

Page_Load ハンドラーで次のコードを使用して、実行時に特定の列を動的に読み取り専用にしようとしています。

                GridNumericColumn gncp = grid.MasterTableView.GetColumn("ActualProduction") as GridNumericColumn;
                if (gncp != null)
                {
                    gncp.ReadOnly = true;
                }

ただし、上記のコードは、列がグリッドの最後の列である場合にのみ機能します。最後から 2 番目、またはさらに左の列を試してみると、その行の [編集] コマンドが機能しなくなります。例外はスローされず、EditCommand が起動されますが、そこでパーティは終了します。

ページ ライフ サイクルの間違った場所でグリッドを変更している可能性があると思いますが、試行錯誤して適切な場所を探し始めたくはありません。grid_NeedDataSourceページの読み込みではなく、を使用してグリッドをバインドします。何か案は?

4

2 に答える 2

1

グリッドの PreRender ハンドラ内で読み取り専用ステータスを設定してみてください。これはそれを行うためのより適切な場所だと思います。列のカスタマイズの詳細については、こちらをご覧ください。

ディック

于 2009-11-10T17:40:36.097 に答える
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()
  )
于 2011-05-18T07:39:29.197 に答える