如何从Telerik MVC网格中隐藏列,也从“编辑”视图中隐藏ALSO

时间:2011-05-25 11:19:24

标签: telerik-mvc

我有一个Telerik MVC网格。

需要向某些用户隐藏其中一列。

使用.Visible

很容易实现

问题是,当我启动行的编辑模式时,我想隐藏的列会显示在编辑视图中。

知道如何从网格视图和编辑视图中隐藏列吗?

编辑:我正在使用弹出编辑模式和Ajax绑定。

3 个答案:

答案 0 :(得分:5)

隐藏编辑表单中的列取决于编辑模式。您尚未指定使用的编辑模式,因此我将为每个编辑模式提供一个解决方案:

  • 内联和InCell - 您只需要创建列Readonly(),它就不再可编辑了。

  • Popup或InForm - 这些模式使用Html.EditorForModel,它按设计显示模型的所有属性。因此,甚至会显示未绑定为列的属性。必须通过OnEdit事件使用JavaScript来隐藏编辑表单中的内容。但是,仅在Ajax绑定期间引发OnEdit事件。从您的描述中不清楚您是使用ajax还是服务器绑定。如果使用服务器绑定,则必须挂钩OnLoad JavaScript事件,并使用jQuery从编辑器中隐藏不必要的列。

答案 1 :(得分:0)

除了Atanas的出色响应之外,如果您正在使用Server绑定,您可以使用Html.EditorForModel使用ShowForDisplay和ShowForEdit属性来确定何时为属性创建脚手架。不幸的是,没有内置的方法可以独立设置,但您可以创建并注册自己的ModelMetadataProvider。我使用了这个SO答案中的代码,它让我可以轻松指定在C#代码中编辑表单上显示的内容。

Showing Different fields in EditorForModel vs. DisplayForModel modes in MVC2

答案 2 :(得分:0)

我希望这会有所帮助......并且抱歉线条之间的所有空间但没有它,代码看起来很乱。

就像Atanas Korchev所说,你可以使用javascript,但有一种更简单的方法。您可以将列定义为<ScaffoldColumn(False)> :

Public Class EntityS

    <Key()> _
    <ComponentModel.ReadOnly(True)> _
    <DisplayName("Id")> _
    <ComponentModel.DataAnnotations.Editable(False)> _
    **<ScaffoldColumn(False)> _**
    Public Property Id_EntityS As Integer

    ...

    ...

End Class



@(Html.Telerik().Grid(Of EntityS)() _

   .Name("Grid") _

   .DataKeys(Sub(keys)

             keys.Add("Id_EntityS")

    End Sub) _

    .ToolBar(Sub(commands)

                 commands.Insert().ButtonType(GridButtonType.ImageAndText) _
                                 .ImageHtmlAttributes(New With {.style = "margin-left:0"})

                 End Sub) _

      .DataBinding(Sub(dataBinding)

       dataBinding.Ajax() _

       ...

       End Sub) _

       .Columns(Sub(columns)

        ...

        columns.Command(Sub(commands)

        commands.Edit().ButtonType(GridButtonType.ImageAndText)

        commands.Delete().ButtonType(GridButtonType.ImageAndText)

        commands.Edit.HtmlAttributes("onedit")

        End Sub).Width(180).Title("Commands")

        End Sub) _

        .Editable(Sub(editing)

        editing.Mode(GridEditMode.PopUp).Window(Sub(window)

        End Sub)

        End Sub) _

        ....)