kendo UI动态行转列C#

在这里插入图片描述
如何实现列的动态展示。
首先我们需要了解一个原理,行转列,是把行的值转换成列名,在把行的值赋值到,每一列上,我这边使用的是DataTable做的

  //生成dataTable存放数据
            DataTable dt = new DataTable();
            dt.Columns.Add("SampleId", typeof(string));
            dt.Columns.Add("Code", typeof(string));
            dt.Columns.Add("SamplingTime", typeof(string));
            dt.Columns.Add("SampleTypeName", typeof(string));
            //添加项目列
            foreach (var analysisItem in RndtPaListDistinct)
            {
                dt.Columns.Add(analysisItem, typeof(string));
            }

这段的意思呢,就是把行的数据distinct之后插入到我的datatabel中
这样列名就有了,如果我们想要一些特殊固定的列名,那么就在循环前把这些都加上

 //添加数据
            foreach (var sample in RndtScList)
            {
                DataRow dr = dt.NewRow();
                dr["SampleId"] = sample.SC;
                dr["Code"] = sample.SC_VALUE;
                dr["SamplingTime"] =sample.SAMPLING_DATE?.ToString("yyyy-MM-dd HH:mm:ss");
                dr["SampleTypeName"] = sample.DESCRIPTION;
                //添加项目结果
                foreach (var paraItem in RndtPaListDistinct)
                {
                    if (RndtScPaList.Any(p => p.SC == sample.SC && p.DESCRIPTION ==  paraItem))
                    {
                        var paraData = RndtScPaList.Where(p => p.SC == sample.SC && p.DESCRIPTION ==  paraItem).First().VALUE_S;
                        dr[paraItem] = paraData;
                    }
                    else
                    {
                        dr[paraItem] = "--";
                    }
                }
                dt.Rows.Add(dr);
                }

这是循环我们的实例列对应的去找每一列对应我们的实例是否有值,有的话就加上,没有就用–代替

  DataSet ds = new DataSet();
            ds.Tables.Add(dt);


            DataTable dtCount = new DataTable();
            dtCount.Columns.Add("Total", typeof(int));
            DataRow drCount = dtCount.NewRow();
            drCount["Total"] = totalCount;
            dtCount.Rows.Add(drCount);
            ds.Tables.Add(dtCount);

            DataTableCollection datatable = ds.Tables;
            return datatable;

这是格式化Datable,目的是为了前台的显示

然后是前台的处理,用ajax获取到了这个datable,我们需要去生成这个Grid,那我们的Grid是动态生成的如下

  //执行查询
    function KeySamplePointSearchGenerateGrid(gridData, pageIndex) {
        var columns
        $("#KeySamplePointSearch_Grid").children().remove();
        if (gridData.Total == 0) {
            columns = [];
            $("#KeySamplePointSearch_Grid").kendoGrid({
                filterable: false,
                sortable: false,
                pageable: true,
                resizable: true,
                noRecords: true,
                messages: {
                    noRecords: "无"
                },
                //dataBound: KeySamplePointSearchGridDataBound,
                columns: []
            });
        }
        else {
            columns = KeySamplePointSearchGenerateColumns($.parseJSON(gridData.Data)[0]);

            $("#KeySamplePointSearch_Grid").kendoGrid({

                excel: {
                    fileName: "统计分析.xlsx",
                    filterable: true
                },

                dataSource: {
                    data: $.parseJSON(gridData.Data),
                    serverPaging: true,
                    serverFiltering: true,
                    pageSize: KEYSAMPLEPOINTSELECPAGESIZE,
                    page: pageIndex,

                    sort: [{
                        field: "SamplingTime", dir: "asc"
                    }],
                    schema: {
                        total: function () {
                            return gridData.Total;
                        },
                        model: {
                            id: 'Code'
                        }
                    }
                },
                columns: columns,
                selectable: "cell",
                pageable: true,
                resizable: true,
                encoded: false,
                messages: {
                    noRecords: "无"
                },
                //dataBound: KeySamplePointSearchGridDataBound
            });

            KEYSAMPLEPOINTSEARCHGRID = $("#KeySamplePointSearch_Grid").data("kendoGrid");
            debugger

            $("#KeySamplePointSearch_Grid select").bind("change", function (e) {
                KEYSAMPLEPOINTSELECPAGESIZE = $(this).val();
                KeySamplePointSearchData();
            })
            //group无法使用,移除点击事件
            $("#KeySamplePointSearch_Grid").find('.k-i-collapse').hide();
        }

    }

那么我们可以看到这个的定义是简单的定义,但是columns是有方法的,那么我们看columns是如何得到的

       debugger
        var columns = [];
        for (var dataItem in gridData) {
            var cellClass = "cell-normal";
            var locked = false;
            var hidden = false;
            var width = '100px';
            if (dataItem.indexOf("RQII_") == -1 && dataItem.indexOf("RQAU_") == -1 && dataItem.indexOf("SCAU_") == -1 && dataItem != "SampleId") {
                var columnName;
                switch (dataItem) {
                    case "SamplingTime":
                        columnName = '采样时间';
                        locked = true;
                        width = '180px';
                        break;
                    case "Code":
                        columnName = '编号';
                        locked = true;
                        width = '150px';
                        break;
                    case "SampleTypeName":
                        columnName = '样品类型';
                        locked = true;
                        width = '150px';
                        break;
                    case "SamplePointCode":
                        columnName = '采样位号';
                        locked = true;
                        width = '150px';
                        break;
                    case "SamplePointName":
                        columnName = '取样位置';
                        locked = true;
                        width = '150px';
                        break;
                    case "LocationName":
                        columnName = '@Html.Lang("Model_Sample_Location")';
                        locked = true;
                        width = '150px';
                        break;
                    case "SampleMLP":
                        columnName = '指标';
                        locked = true;
                        hidden = true;
                        width = '150px';
                        break;
                    case "Description":
                        columnName = '@Html.Lang("Model_Sample_Description")';
                        width = '250px';
                        break;
                    case "resultEntry":
                        columnName = '分析人员';
                        width = '120px';
                        break;
                    case "review":
                        columnName = '复核人员';
                        width = '120px';
                        break;
                    case "authorise":
                        columnName = '审核人员';
                        width = '120px';
                        break;
                    case "approval":
                        columnName = '终审人员';
                        width = '120px';
                        break;
                    case "SampleIsPass":
                        columnName = '判定结果';
                        width = '120px';
                        break;
                    default:
                        columnName = dataItem;
                        cellClass = "cell-value";
                        if (dataItem.indexOf("_") == -1) {
                            width = '150px';
                        };
                        break;
                }

                if (columnName == "指标") {
                    var column = {
                        field: dataItem,
                        title: columnName,
                        locked: locked,
                        lockable: false,
                        width: width,
                        hidden: hidden,
                        groupHeaderTemplate: "指标:#= value  #"
                    };
                }
                else {
                    var column = {
                        field: "['" + dataItem + "']",
                        title: columnName.replace("Text_", "").replace("_", "<br/>"),
                        locked: locked,
                        lockable: false,
                        width: width,
                        hidden: hidden,
                        attributes: {
                            class: cellClass
                        },
                    };
                }
                columns.push(column);
            }
        }
        return columns;

这是会根据gridData生成对应的列。那么我们接下去需要做数据绑定

   dataSource: {
                    data: $.parseJSON(gridData.Data),
                    serverPaging: true,
                    serverFiltering: true,
                    pageSize: KEYSAMPLEPOINTSELECPAGESIZE,
                    page: pageIndex,

                    sort: [{
                        field: "SamplingTime", dir: "asc"
                    }],
                    schema: {
                        total: function () {
                            return gridData.Total;
                        },
                        model: {
                            id: 'Code'
                        }
                    }
                },

通过dataSource的方式,我们就把数据给绑定到Grid上了,一个简单的行专列就实现了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JSP(JavaServer Pages)是一种动态网页开发技术,它允许在HTML页面中插入Java代码和JSP标签。JSP技术可以让我们将Java代码和HTML页面进行分离,使得开发人员可以更加专注于网站的业务逻辑。在JSP中,我们可以使用Java的各种API,包括JDBC API、Servlet API等,从而实现动态网页的生成和数据交互。 Kendo UI是一套基于jQuery的Web应用程序UI框架,它提供了大量的UI组件和工具,如图表、表格、表单、日历、导航等,用于构建现代化的Web应用程序。Kendo UI通过提供丰富的UI组件和易用的API,简化了Web应用程序的开发过程,帮助开发人员快速构建出高质量的Web应用程序。 Element UI是一套基于Vue.js的UI框架,它提供了一系的组件和工具,如表格、表单、弹窗、消息提示等,用于快速构建现代化的Web应用程序。Element UI通过提供丰富的组件和简洁易用的API,使得Web应用程序的开发变得更加高效和便捷。 关于Kendo UI与Element UI之间的比较,它们都是非常优秀的UI框架,在不同的场景下都有自己的优势。Kendo UI提供了更多的组件和工具,以及更多针对企业级应用程序的特性,而Element UI则更注重于简洁易用和响应式设计。如果您正在使用Vue.js作为您的前端框架,那么Element UI可能更适合您。如果您需要更多的组件和工具,并且正在开发一个大型的企业级应用程序,则Kendo UI可能更适合您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

因为有你更精彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值