zoukankan      html  css  js  c++  java
  • kendo grid应用经验总结

    学习网址

    https://docs.telerik.com/kendo-ui/controls/editors/dropdownlist/overview

    https://demos.telerik.com/aspnet-mvc/dropdownlist

    https://www.cnblogs.com/libingql/p/3770758.html

    目录

    1、自定义toolbar

    2、update data及事件捕捉

    3日期显示及标题样式

    4读取数据(传参)

    5grid插入数据

    6、template展开里面小项

    7、clientTemplate 超链接形式

    8、sync,事件

    9、requestEnd事件

    10、行内编辑事件,监听具体cell的修改

    11、判断行内数据是否被修改

    12、改变特殊行的字体颜色

    13、超链接

    14行头加复选框

    15、kendo grid行内写编辑按钮 

    16初始排序

    17、bool型foreignkey

    18 clientTemplate

    19基本应用及序号,action load data

    20、js修改grid的datasource,column等

    21、获取筛选排序参数post出去用于导出数据等

    22、待grid绑定完数据设置高度,避免出现垂直滚动条

    23、聚合

    1、自定义toolbar

    .ToolBar(toolbar =>
    {
    toolbar.Template(@<text>
    <div class="toolbar">
    <button id="import" class="btn btn-primary btn-sm">调取公司</button>
    @* <button id="delete" class="btn btn-primary btn-sm">删除</button>*@
    </div>
    </text>);
    })

    2、update data及事件捕捉

    .Update(read => read.Action("SaveAddPlans", "PlanManagement"))
    .Events(events => events.Error("getError"))
    .Events(events => events.RequestEnd("updateSuccess"))

    3日期显示及标题样式

    columns.Bound(p => p.PlanCheckDate).Format("{0:yyyy-MM-dd}").Title("<span style='color:red;'>*</span>计划检查时间").Width(120).EditorTemplateName("PlanCheckDate");

    4读取数据(传参)

      

    .Read(read => read.Action("LoadCompanies", "PlanManagement").Data("getCompanyFilter"))
    
    function getCompanyFilter() {
    return {
    idFilter: $("#IdFilter").val(),
    watchCategoryIdFilter: $("#WatchCategoryIdFilter").val(),
    doorCategoryValueFilter: $("#DoorCategoryValueFilter").val()
    };

    5grid插入数据

      originDataSource.insert({ CompanyId: tempRow[tempIndex].CompanyId, Name: tempRow[tempIndex].Name, DepartmentId: null, OperatorId: null, 
    PlanCheckDate: null, Comment: null, Id: null, PlanCheckContentId: null, PlanCheckContent: { Value: null, Text: "请选择" }, Department: { Value: null, Text: "请选择" },
    Operator: { Value: null, Text: "请选择" } });

    6、template展开里面小项

     

    
    

    .Scrollable(scr => scr.Height(500))
    .Resizable(resize => resize.Columns(true))
    .ClientDetailTemplateId("template")
    )

    <script id="template" type="text/kendo-tmpl">
    @(Html.Kendo().Grid<CompanyWatchPlanModel>()
    .Name("InnerGrid#=Id#")
    .HtmlAttributes(new { style = "900px;" })
    .DataSource(dataSource => dataSource
    .Ajax()
    .Model(model =>
    {
    model.Id(p => p.Id);
    model.Field(p => p.PlanCheckDate).Editable(false);
    model.Field(p => p.PlanExecuteStatusId).Editable(false);
    })
    .Read(read => read.Action("GetPlanAccordingToCompanyId", "PlanManagement", new { id = "#=Id#" }))
    )
    .EnableCustomBinding(true)
    .Columns(columns =>
    {
    columns.Bound(o => o.Id).Title("执法任务编号").Width(100);
    columns.Bound(p => p.PlanCheckDate).Format("{0:yyyy-MM-dd}").Title("计划检查时间").Width(120);
    columns.ForeignKey(o => o.PlanExecuteStatusId, (IEnumerable)ViewData["PlanExecuteStatuses"], "Value", "Text").Title("计划执法状态").Width(100);
    })
    .ToClientTemplate())
    </script>

    7、clientTemplate 超链接形式

    columns.Bound(p => p.PhotoLocation).ClientTemplate("# if (PhotoLocation=='') {#" + "无" + "#}#" + "# if (PhotoLocation!='') {#" + Html.ActionLink("影像浏览", "ReviewFile", "CommonAjax",
    new { folderName = "SafeWatchApi/RejectCheckItemPhotos/upload", fileBasename = "#= getBaseName(PhotoLocation)#", extendName = "#= getExtendName(PhotoLocation)#" }
    , new { target = "_blank" }).ToHtmlString() + "#}#").Title("影像浏览").Width(90).Filterable(false).Sortable(false);
    
    function getBaseName(fileName) {
    return fileName.substring(fileName.lastIndexOf('/')+1, fileName.lastIndexOf('.'));
    }
    
    function getExtendName(fileName) {
    return fileName.substring(fileName.lastIndexOf('.'),fileName.length);
    }

    8、同步更新数据

    .Update(read => read.Action("SaveTempMissions", "PlanSchedule").Type(HttpVerbs.Post).Data("getAllFiles"))
    
    $("#confirmOk").click(function () {
    
    $("#PlansGrid").data("kendoGrid").dataSource.sync();
    });

    9、requestEnd事件,可以用e.type来判断执行的某种操作请求。完成后可进一步处理

    .Read("ReadTownEmploymentTargetList", "EHAdmin")
    .Update("EditTownEmploymentTargetList", "EHAdmin")
    .Create("CreateTownEmploymentTargetList", "EHAdmin")
    .Events(events => events.RequestEnd("refreshGrid"))
    
    function refreshGrid(e) {
    if (e.type != "read") {
    var grid = $("#TownEmploymentTargetGrid").data("kendoGrid");
    grid.dataSource.read();
    
    }
    }

     

    10、行内编辑事件,监听具体cell的修改

     

    .Events(x => x.Edit("GridEdit"))
    //.Selectable(selection => selection.Enabled(true))
    .Groupable(grouping => grouping.Enabled(true))
    
     
    
    function GridEdit(e) {
    $("[name='UserName']").change(function () {
    var userName = $(this).val();
    var url = '@Url.Action("IsEmploymentHelpUserNameExist", "EHAdmin")';
    $.post(url, { userName: userName }, function (isExist) {
    if (isExist) {
    alert("该用户名已存在,请重新选择填写!");
    $("[name='UserName']").val("").focus();
    }
    });
    });
    
    //判断是否行内新增
    
     
    
    if (!e.model.isNew()) {
    $("[name='IdentityCode']").data("kendoDropDownList").enable(false);
    };
    }
    
     

    11、判断行内数据是否被修改

    var data = $("#OldGrid").data("kendoGrid").dataSource.data();
    for (var k = 0; k < data.length; k++) {
    if (data[k].dirty) {
    changed = true;
    break;
    }
    }

    12、改变特殊行的字体颜色

    .Filterable()
    .Scrollable(x => x.Enabled(true))
    .Scrollable(scr => scr.Height(280))
    .Resizable(resize => resize.Columns(true))
    .Events(e => e.Change("onChange"))
    .Events(e => e.DataBinding("onDataBinding"))
    .Events(events => events.DataBound("getSuccess"))
    
     
    
    function getSuccess() {
    var nowDate = new Date();
    var grid = $("#MissionsGrid").data("kendoGrid");
    var data = grid.dataSource.data();
    $.each(data, function (i, row) {
    if (row.ScheduleExecuteDate >= nowDate)
    $('tr[data-uid="' + row.uid + '"] ').css("color", "#ff0000");
    });
    }

     

    13、超链接

    (1)columns.Bound(p => p.FileTypeText).ClientTemplate(Html.ActionLink("#= FileTypeText #", "ReviewFile", "CommonAjax",
    new { folderName = "SafeWatchApi/Pdfs/uploadPdf/123", fileBasename = "#= getBaseName(FileLocation)#", extendName = ".pdf" }, new { target = "_blank" }).ToHtmlString())).Title("详情").Width(30).Filterable(false).Sortable(false); 
    
    function getBaseName(fileName) {
    return fileName.substring(0, fileName.lastIndexOf('.'));
    }
    
     
    
     (2)columns.Bound(p => p.DepartmentTypeKey).ClientTemplate("<a href=#=buildUrl(DepartmentTypeKey)# target= '_self'>>></a>").Title("详情").Width(30).Filterable(false).Sortable(false);
    
    function buildUrl(departmentTypeKey) {
    var url= "@Url.Action("RealCompleteTotalStats", "Stats",
    new
    {
    yearFilter = "__yearFilter__",
    minMonthFilter = "__minMonthFilter__",
    maxMonthFilter = "__maxMonthFilter__",
    departmentTypeFilter = "__departmentTypeFilter__"
    })";
    return url.replace("__yearFilter__", yearFilter).replace("__minMonthFilter__", minMonthFilter).replace("__maxMonthFilter__", maxMonthFilter)
    .replace("__departmentTypeFilter__", departmentTypeKey).replace(/amp;/g, "");
    }

    14行头加复选框

    <link href="@Url.Content("~/Content/blue.css")" rel="stylesheet">
    <script src="@Url.Content("~/Scripts/icheck.js")"></script>
    
    columns.Bound(p => p.IsSelected).ClientTemplate("<input type='checkbox' class='icheckbox_square-blue iradio_square-blue' onclick='SetCheckBox(this)' />").Width(32).Title("");
    
    function SetCheckBox(element) {
    var row = $(element).parent().parent();
    var data = $("#PlansGrid").data("kendoGrid").dataItem(row);
    //checkstatuesid 1 means uncheck,2 means checked
    if (data.CheckStatusId > 1) {
    alert("正在调度中");
    element.checked = false;
    }
    else {
    if (data.CheckStatusId == "1") {
    if (element.checked) {
    uncheckedPlanIds.push(data.Id);
    }
    else {
    for (var i = 0; i < uncheckedPlanIds.length; i++) {
    if (uncheckedPlanIds[i] == data.Id) {
    uncheckedPlanIds.slice(i, 1);
    break;
    }
    }
    }
    } 

    15、kendo grid行内写编辑按钮 

    columns.ForeignKey(p => p.IsFreeEquipment, (IEnumerable)ViewData["isOrNotList"], "Value", "Text").Title("是否<br>免费设备").Width(70);
    columns.Command(command => { command.Custom("编辑").Click("edit"); command.Custom("删除").Click("deleteRecord"); }).Width(120);
    
    function edit(e) {
    e.preventDefault();
    var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
    $("#Id").val(dataItem.Id);
    $("#window").data("kendoWindow").setOptions({
    title: "编辑洗碗机主数据"
    });
    $("#window").data("kendoWindow").center().open();
    }

    16初始排序

    .Read(read => read.Action("LoadTestSummaryHistories", "CompanySummary").Data("getFilter"))
    .Sort(sort => sort.Add(m => m.TestDate).Ascending())
    
    .Sort(sort => sort.Add(m => m.GovernmentSafeRankResult).Ascending())

    17、bool型foreignkey

    columns.ForeignKey(p => p.CheckResult, (IEnumerable)ViewData["IsValidList"], "Value", "Text").ClientTemplate("#= (CheckResult == true) ? '合格 ' : '不合格' #").Title("检查结论").Width(120);
    
    public List<SelectItemDto> GetIsValidList()
    {
    return new List<SelectItemDto>() { 
    new SelectItemDto{ Text ="合格",Value = "True"},
    new SelectItemDto{ Text ="不合格",Value = "False"}
    };
    }

    18 clientTemplate

     

    columns.Bound(m => m.Id).ClientTemplate("#= getRowNumber()# #=(IsNumberCancellation == true) ? '销户' : '' #").Title("序号").Width(60).Sortable(false).Filterable(false);

    19基本应用及序号,action load data

    <div class="row">
    <div class="col-sm-12">
    @(Html.Kendo().Grid<MachineMasterViewModel>()
    .Name("DemandGrid")
    .DataSource(dataSource => dataSource
    .Ajax()
    .Model(model =>
    {
    model.Id(p => p.Id);
    model.Field(p => p.Name);
    model.Field(p => p.BrandId);
    })
    .Read(read => read.Action("LoadMachines", "MachineMaster").Data("getFilter"))
    .Events(events => events.Error("getError"))
    .PageSize(10)
    )
    
    .ToolBar(toolbar =>
    {
    toolbar.Template(@<text>
    <div class="toolbar">
    <button id="import" class="btn btn-primary btn-sm">调取公司</button>
    @* <button id="delete" class="btn btn-primary btn-sm">删除</button>*@
    </div>
    </text>);
    })
    .EnableCustomBinding(true)
    .Columns(columns =>
    {
    columns.Bound(p => p.Id).ClientTemplate("#= getRowNumber() #").Title("序号").Width(40).Sortable(false);
    columns.ForeignKey(p => p.BrandId, (IEnumerable)ViewData["brands"], "Value", "Text").Title("品牌").Width(70);
    columns.Bound(o => o.Name).Title("洗碗机型号").Width(70);
    columns.Command(command => { command.Custom("编辑").Click("edit"); command.Custom("删除").Click("deleteRecord"); command.Custom("查看").Click("showDetails"); }).Width(120);
    })
    .AutoBind(true)
    .Events(e => e.DataBinding("onDataBinding"))
    .Pageable(pageable => pageable
    .Refresh(true)
    .PageSizes(new[] { 10, 15, 20, 25, 50, 100 })
    .ButtonCount(5))
    .Scrollable(x => x.Enabled(true))
    .Scrollable(scr => scr.Height(400))
    )
    </div>
    </div>
    
     
    
    <script>
    var rowNumber = 0;
    var deletedId = 0;
    
    function onDataBinding() {
    var grid = $('#DemandGrid').data('kendoGrid');
    rowNumber = (grid.dataSource.page() - 1) * grid.dataSource.pageSize();
    
    }
    
    function getRowNumber() {
    return ++rowNumber;
    }
    
    function getFilter() {
    return {
    nameFilter: $("#nameFilter").val()
    };
    }
    
    function getError() {
    var url = "@Url.Action("GotError", "Error")";
    window.location = url;
    }
    
     
    
    public ActionResult LoadMachines([DataSourceRequest] DataSourceRequest request, string nameFilter)
    {
    try
    {
    var entities = _commonService.GetMachineMasters().Where(t => t.Status != 1);
    var planModels = entities.ToDataSourceResult(request, Mapper.Map<MachineMasterView, MachineMasterViewModel>);
    return Json(planModels, JsonRequestBehavior.AllowGet);
    }
    catch (Exception exp)
    {
    _commonService.SaveLog(exp.ToString());
    throw;
    }
    }

     

     

    20、js修改gird的datasource,column等

    $('#CompaniesGrid').data('kendoGrid').dataSource.aggregate([
    { field: "ValueAddedTax", aggregate: "sum" }
    ]);
    
    $('#CompaniesGrid').data('kendoGrid').setOptions(
    { columns: [{ field: "ValueAddedTax", title: "Product Name" ,aggregates: ["sum"],
    footerTemplate: "合计:#=getFormatString(sum)#"
    }]
    }
    );

    21、获取筛选排序参数post出去用于导出数据等

    var grid = $('#LaborsGrid').data('kendoGrid');
    var parameterMap = grid.dataSource.transport.parameterMap;
    var sortData = grid.dataSource.sort();
    var filterData = grid.dataSource.filter();
    var groupData = grid.dataSource.group();
    var prepared = parameterMap({ sort: sortData, filter: filterData, group: groupData });
    var url = "@Url.Action("ExportData", "EAPostCheck")";
    $.post(url, prepared, function() {
    window.location = "@Url.Action("GenerateWord", "EAPostCheck")";
    });

     

    22、待grid绑定完数据设置高度,避免出现垂直滚动条

    .Filterable(x => x.Enabled(false))
    .Scrollable(x => x.Enabled(true))
    //.Scrollable(scr => scr.Height(350))
    .Resizable(resize => resize.Columns(true))
    .Events(e => e.DataBinding("onDataBinding").DataBound("onDataBound"))
    
    function onDataBound() {
    $("#Grid .k-grid-content").height($("#Grid tbody[role*='rowgroup']")[0].offsetHeight + 30);
    }

     23、获取选择的行

            $("#applyPrint").click(function () {
                var grid = $("#checksGrid").data("kendoGrid");
                var row = grid.select();
                if (row.length == 1) {
                    var data = grid.dataItem(row);
                    var url = "@Url.Action("ApplyPrintReview", "CreateBusinessAllowanceApplicationSummary", new { id = "__id__" })";
                    window.location.href = url.replace('__id__', data.Id);
                } else {
                    $("#noRowSelectModal").modal();
                }
            });

     23、聚合

     .Columns(columns =>
        {
            columns.Bound(p => p.ProductName)
                .ClientFooterTemplate("Total Count: #=count#")
                .ClientGroupFooterTemplate("Count: #=count#");        
            columns.Bound(p => p.UnitPrice).Format("{0:C}")
                .ClientGroupHeaderColumnTemplate("Sum : #=sum#");
            columns.Bound(p => p.UnitsOnOrder)
                .ClientFooterTemplate("Aver:#=getFormatString(average)#")
                .ClientGroupFooterTemplate("Average: #=average#");
            columns.Bound(p => p.UnitsInStock)
                .ClientGroupHeaderTemplate("Units In Stock: #= value # (Count: #= count#)")
                .ClientFooterTemplate("<div>Min: #= min #</div><div>Max: #= max #</div>");
        })
        .Pageable()    
        .Sortable()        
        .DataSource(dataSource => dataSource
            .Ajax()
            .Aggregates(aggregates =>
            {
                aggregates.Add(p => p.UnitsInStock).Min().Max().Count();
                aggregates.Add(p => p.UnitsOnOrder).Average();
                aggregates.Add(p => p.ProductName).Count();
                aggregates.Add(p => p.UnitPrice).Sum();
            })
            .Group(groups => groups.Add(p => p.UnitsInStock))
            .Read(read => read.Action("Aggregates_Read", "Grid"))
        )

    function getFormatString(data) {
       return Math.round(data * 10)/10;
    }

     
  • 相关阅读:
    while循环&CPU占用率高问题深入分析与解决方案
    Jmeter 发送json
    HTTP请求各参数详解
    Fast Stone截图工具使用教程
    程序员必备神器(FastStoneCapture)
    千古第一败家子杨广(打击异己、毫无承担、无识人之明)
    在路上看和今天要解决的问题可能相关的书,顺便工作上实践一下,立码就记住了
    与Qt的联系方式:邮件,论坛,销售,Bug报告
    Qt for Automation
    Qt for WebAssembly
  • 原文地址:https://www.cnblogs.com/taoshengyujiu/p/5000264.html
Copyright © 2011-2022 走看看