【问题标题】:I want to display only 100 characters in Kendo Grid我只想在 Kendo Grid 中显示 100 个字符
【发布时间】:2014-08-26 11:37:16
【问题描述】:

好吧,我真的没有更好的标题,但事情就是这样。 我只是需要改变我的剑道网格。这是它的图片。

这是代码。

@(Html.Kendo().Grid<TekstenViewModel.Tekst>()
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Template(@<text></text>).ClientTemplate("<input type='checkbox'/>").Width(10).Hidden(!Model.Administrator);

        columns.Bound(product => product.RESOURCE_SET_NAAM).ClientTemplate("#= RESOURCE_SET_NAAM#");

        columns.Bound(product => product.Naam).ClientTemplate("#= Naam#");

        columns.Bound(product => product.Waarde).ClientTemplate("<div id='editorDiv'><div class='input'>#=Waarde#</div><div class='editor'>" +
            Html.WebCore().LinkButton(type: ButtonType.Edit, htmlAttributes: new { onclick = "openPopupDemo('#: Waarde #', '#: ID #', 'Waarde')" }));

        columns.Bound(product => product.Opmerking).ClientTemplate("<div id='editorDiv'><div class='input'>#=Opmerking#</div><div class='editor'>" +
            Html.WebCore().LinkButton(type: ButtonType.Edit, htmlAttributes: new { onclick = "openPopupDemo('#: Opmerking #', '#: ID #', 'Opmerking')" }));

        columns.Template(@<text></text>).ClientTemplate("<div id='deleteDiv'><div class='delete'><a class=\"delete iconBtn\" onclick=\"deleteResourceItem(#: ID #, '#: Naam #')\"></a></div></div>").Width(10).Hidden(!Model.Administrator);
    })
    .Pageable()
    .Sortable()
    .Filterable()
    .Events(events => events.Edit("onCellEdit").DataBinding("onDataBinding"))
    .Groupable()
    .Navigatable()
    .Editable(editable => editable.Mode(GridEditMode.InCell).DisplayDeleteConfirmation(false))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Batch(true)
        .Events(e => e.Error("error_handler"))
        .Model(model =>
        {
            model.Id(product => product.ID);
            model.Field(product => product.Naam).Editable(Model.Administrator);
            model.Field(product => product.Opmerking).Editable(Model.Administrator);
            model.Field(product => product.Waarde).Editable(!Model.ReadOnly);
            model.Field(product => product.RESOURCE_SET_ID).DefaultValue(Model.SetID);
            model.Field(product => product.Type).DefaultValue(Domain.Agromilieu2.Common.Objects.Entities.Resources.ResourceType.GLOBAL_RESOURCES);
            model.Field(product => product.Taal).DefaultValue(Domain.Agromilieu2.Common.Agromilieu2Constants.Resources.DEFAULT_TAAL_CODE);
        })
        .Create(create => create.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_Create, MVC.BeheerTeksten.Name).Data("onCreateAdditionalData"))
        .Read(read => read.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_Read, MVC.BeheerTeksten.Name, new { setID = Model.SetID }).Data("onReadAdditionalData"))
        .Update(update => update.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_Update, MVC.BeheerTeksten.Name))
        .Destroy(destroy => destroy.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_Delete, MVC.BeheerTeksten.Name))
        )
)

例如,在 Waarde 列中,每个单元格中都有文本和一个按钮。 该按钮打开带有该文本的剑道编辑器。

要求在单元格中最多显示 100 个字符,然后在我打开 Kendo 编辑器时显示全文。我不知道这是否可能。

【问题讨论】:

    标签: kendo-ui kendo-grid kendo-editor


    【解决方案1】:

    你当然可以,我看到你有列的客户端模板添加这个作为模板

    #if(Waarde.length>100){# # var myContent =Waarde; #  # var dcontent = myContent.substring(0,100); # <span>#=kendo.toString(dcontent)#</span> #}else{# <span>#=Waarde#</span> #}#
    

    注意:未测试,可能需要检查一下模板

    添加您喜欢的任何其他 HTML 带有 IF ELSE 的 Kendo 模板,有关更多信息,请查看文档

    http://docs.telerik.com/kendo-ui/getting-started/framework/templates/overview#internal-vs-external-templates

    【讨论】:

    • 像魅力一样工作。谢了。
    【解决方案2】:

    另一种编写 ClientTemplate 的方法是使用 javascript 函数进行逻辑。

    这样你就可以避开复杂的标签系统。

    首先定义函数:

    <script type="text/javascript">
        function getTheSubstring(value, length)
        {
            if (value.length > length)
                return kendo.toString(value.substring(0, length)) + "...";
            else return kendo.toString(value);
        }
    </script>
    

    然后你在列ClientTemplate函数中使用它:

    columns.Bound(p => p.Value).ClientTemplate("#:getTheSubstring(data.Value,40)#");
    

    工作和测试。

    【讨论】:

    • 最佳答案,因为如果您正在编辑某些内容,它将按预期工作!
    【解决方案3】:

    只是提供一个替代方案,尽管如果您确实需要固定数量的字符,那么这里的其他答案会更好。但是,如果您只是在列中的有限宽度之后没有用省略号换行以指示更多数据,那么您也可以使用 css 来实现这一点。

    .k-grid td{
        white-space: nowrap;
        text-overflow: ellipsis;
        max-width : 200px;
    }
    
    .k-grid table {
        table-layout: fixed;
    }
    

    当然,这将针对所有网格单元格,因此如果您只想针对一列,则在 JavaScript 中定义网格时为​​该列设置一个 css 类。

    $("#grid").kendoGrid({
        columns: [{ field: "Id", hidden: true },
            { field: "Name", title: "Name" },
            { field: "LongData", title: "Main Content", attributes: { "class": "myColClass" } }
        ],
        dataSource: {}
    });
    

    然后回到css设置类:

     .myColClass {
        max-width : 200px;
        background-color : azure;
    }
    

    避免在模板中使用任何额外的 JavaScript 代码和复杂的主题标签系统。即使将列或网格的大小调整为更小,它也将保持为单行列。

    【讨论】:

      【解决方案4】:

      试试这个

      { field: "description", title: "Description", width: 140,template:function(dataItem){
      
              if(dataItem.description.length>100){
                  return dataItem.description.substring(0,20);
              }else{
                  return dataItem.description;
              }
      
      } },
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-29
        • 2013-07-15
        • 1970-01-01
        • 2020-11-19
        • 2022-12-12
        相关资源
        最近更新 更多