2016-01-07 89 views
-2

我有一個像這樣的劍道網格。Kendo UI網格列可編輯假使用GridColumnSettings

@(Html.Kendo().Grid(Model.GridView.DataSource) 
    .Name("grid").Columns(columns => columns.LoadSettings(Model.GridView.ColumnSettings)) 
    .Editable(editable => editable.Mode(GridEditMode.InLine)) 
    .ToolBar(toolbar => toolbar.Create().Text("Add User")) 
    .DataSource(dataSource => dataSource 
     .Ajax().ServerOperation(true) 
     .Model(model => 
     { 
      model.Id(p => p.Id); 
      model.Field(p => p.Id).Editable(false); 
     }) 
     .Read(read => read.Action("OnGridRead", "Manage")) 
    ) 
) 

而且我使用的劍道GridColumnSettings在這裏像下面定義在我的模型是一個GridView(模型)的列。

public class GridView 
    { 
     public List<GridColumnSettings> ColumnSettings 
     { 
      get 
      { 
       var items = new List<GridColumnSettings> 
          { 
           new GridCommandColumnSettings 
           { 
            Commands = 
            { 
             new GridEditActionCommand() 
            }, 
            Width = "70px" 
           }, 
           new GridColumnSettings 
           { 
            Member = "Id", 
            Hidden = true 
           }, 
           new GridColumnSettings 
           { 
            Member = "FirstName" 
           }, 
           new GridColumnSettings 
           { 
            Member = "LastName" 
           }, 
           new GridColumnSettings 
           { 
            Member = "UserName"         

           }, 
           new GridColumnSettings 
           { 
            Member = "Password", 
            ClientTemplate = "***", 

           } 

          }; 

       return items; 
      } 
     } 
    } 

在這裏我需要禁用用戶名字段只在網格的內聯編輯模式。 目前在GridColumnSettings類中沒有可用屬性,如editable。如何在網格的編輯模式下使用GridColumnSettings類禁用用戶名類。

回答

3

請試試下面的代碼片段。我在下面的演示中禁用了StudentID字段。

@(Html.Kendo().Grid<MvcApplication1.Models.Student>() 
    .Name("Grid") 
     //.Columns(columns => 
     // { 
     //  columns.Bound(c => c.StudentID); 
     //  columns.Bound(c => c.StudentName); 
     // }) 
    .Columns(cols => cols.LoadSettings(ViewBag.cols)) 
     .Scrollable() 
     .Groupable() 
     .Sortable() 
     .Editable(editable => editable.Mode(GridEditMode.InLine)).ToolBar(toolbar => toolbar.Create()) 
     .Pageable(pageable => pageable 
      .Refresh(true) 
      .PageSizes(true) 
      .ButtonCount(5)) 
     .Events(events => events.Edit("onEdit")) 
     .DataSource(dataSource => dataSource 
      .Ajax() 
      .Read(read => read.Action("Grid_Read", "Home")) 
      .Update(update => update.Action("EditingInline_Update", "Grid")) 
       .Create(update => update.Action("EditingInline_Create", "Grid")) 
      .Model(model => 
     { 
      model.Id(p => p.StudentID); 
      model.Field(p => p.StudentID).Editable(true); 
     }) 
     ) 
) 

方法1: -

<script> 
    function onEdit(e) { 
     if (e.model.isNew() == false) { 
      $(e.container).find("input[name='StudentID']").attr('disabled', 'disabled'); 
     } 
    } 
</script> 

方法2: -

<script> 
    function onEdit(e) { 
     if (e.model.isNew() == false) { 
      $(e.container).find("input[name='StudentID']").parent().html($(e.container).find("input[name='StudentID']").val()).removeAttr('data-container-for'); 
     } 
    } 
</script> 

讓我知道如果任何問題。

+0

方法爲我工作。 但我也認爲它只會發生在你沒有明確指定模型時綁定網格,而不管它的MVVM與否。 作爲一種替代方案,我在kendo數據源中添加了模型,並提到字段爲「editable:false」,並且它的工作原理 –

2

請嘗試下面的解決方案來禁用網格編輯模式下的用戶名字段。

.Model(model => 
     { 
      model.Id(p => p.Id); 
      model.Field(p => p.Id).Editable(false); 
      model.Field(p => p.UserName).Editable(false); 
     }) 
+1

我試過了,但它在插入模式下禁用了用戶名字段也是 – tarzanbappa

+0

是的,你是正確的,它將禁用用戶名字段在插入模式下也是如此。但同樣的情況將適用於GridColumnSettings類。我嘗試了這個類中的'可見'屬性。 –