Dojo 1.6 官方教程: DataGrid导引

easyui-datagrid官方demo easyui-datagrid官方demo,包含datagrid中combobox的使用方法,以及选择行,删除行,编辑行等实现方法。浏览器直接打开html可能无法访问他的data/datagrid_data.json里的数据,可以将datagrid_data.json里的数据放到html里var datas={}作为json数据放入datagrid里,再将他原来的url:'data/datagrid_data.json'改为data:datas 立即下载

原作者:Bryan Forbes
原文链接:http://dojotoolkit.org/documentation/tutorials/1.6/datagrid/

译者:zhuxw (zhuxw1984@gmail.com)


鉴于DataGrid对于表格数据的有效呈现,它早已成为许多应用的核心组件之一。在本教程中,我们将着眼于如何定义grid的布局结构,并讨论DataGrid所采用的滚屏机制。


难度:中等

适用Dojo版本:1.6 (其实绝大部分内容自1.2开始就支持了——译者注)


dojox.grid.DataGrid


估计我们都有过这样的经历:你的老板突然找到你,要求在你那个正在开发的应用中显示一大堆数据。作为一个Web开发人员,你知道数据呈现得越多,浏览器占用的内存就越大——但你的老板不懂这个,他只是要把这些数据弄进那个应用里。现在就是dojo的dojox.grid.DataGrid大显身手的时候了。DataGrid能够承载数千行的数据,并自如地滚屏,同时只占用相当小的内存。在本教程中,我们将学习DataGrid的基础知识。

为了提供DataGrid处理海量数据能力的直观印象,我们创建了一个显示美国职业棒球选手统计数据的grid:

【示例】


可以看到,DataGrid能够轻易地承载这份包含了17452项纪录的数据列表。在本教程中,我们将使用一份较小的数据集作为例子:只显示名人堂球员的击球统计。好了,让我们开始吧!


DataGrid的组成部分


你可能已经猜到了,DataGrid由数个不同部分组成。在最顶层,一个DataGrid由视图(View)组成。视图将DataGrid分割成好几个区域,并为每个区域单独渲染表头(header)和内容(content)。表头和内容由行(row)组成,行由子行(sub-row)组成。子行由单元格(cell)组成。让我们来看一些图,好有个直观的理解:

在后面的教程中,我们还将不断修这个示例的布局结构。要定义一个DataGrid的模样,我们需要在构造函数里给structure(结构)属性传递一些对象和数组。我们将从最小的可定义单元开始——单元格——直到最大的组成部分——视图。我们暂时不涉及如何从服务器端获取数据,但下一篇教程会涵盖这部分内容。


单元格


我们需要做的第一件事就是告诉DataGrid需要为每条数据记录显示哪些单元格(或称为“列”)。为了做到这点,我们将给structure属性传递一个“单元格定义”的数组。每一个单元格定义对象可以包含以下几个属性:
  • name:在表头部分显示的字符串
  • field:在数据记录中(用于获取数据——译者注)的字段名
  • width:表示列宽的CSS宽度字符串(需要带单位,不带单位的话默认为em——译者注)
  • hidden:一个布尔值,如果是true,那么该列将被隐藏
grid = new dojox.grid.DataGrid({
    store: store,
    query: { id: "*" },
    structure: [
        { name: "First Name", field: "first", width: "84px" },
        { name: "Last Name", field: "last", width: "84px" },
        { name: "Bats", field: "bats", width: "70px" },
        { name: "Throws", field: "throws", width: "70px" },
        { name: "G", field: "totalG", width: "60px" },
        { name: "AB", field: "totalAB", width: "60px" },
        { name: "Games as Batter", field: "totalGAB", width: "120px" },
        { name: "R", field: "totalR", width: "60px" },
        { name: "RBI", field: "totalRBI", width: "60px" },
        { name: "BB", field: "totalBB", width: "60px" },
        { name: "K", field: "totalK", width: "60px" },
        { name: "H", field: "totalH", width: "60px" },
        { name: "2B", field: "total2B", width: "60px" },
        { name: "3B", field: "total3B", width: "60px" },
        { name: "HR", field: "totalHR", width: "60px" }
    ]
}, "grid");
【示例】

DataGrid还提供了通过CSS样式和CSS类控制单元格视觉效果的方法。单元格定义中的headerStyles属性、cellStyles属性、以及styles属性都是CSS样式字符串(注意必须以分号结尾),它们分别应用于表头单元格、内容单元格,以及所有单元格。另外,headerClasses属性、cellClasses属性、以及classes属性则是以空格分隔的CSS类名,分别用于各自对应的单元格。
<style>
.firstName {
    font-style: italic;
}
.lastName {
    font-weight: bold;
}
</style>
<script>
grid = new dojox.grid.DataGrid({
    store: store,
    query: { id: "*" },
    structure: [
        { name: "First Name", field: "first", width: "84px",
            classes: "firstName" },
        { name: "Last Name", field: "last", width: "84px",
            cellClasses: "lastName" },
        { name: "Bats", field: "bats", width: "70px",
            cellStyles: "text-align: right;" },
        { name: "Throws", field: "throws", width: "70px" },
        { name: "G", field: "totalG", width: "60px" },
        { name: "AB", field: "totalAB", width: "60px" },
        { name: "Games as Batter", field: "totalGAB", width: "120px",
            styles: "text-align: center;" },
        { name: "R", field: "totalR", width: "60px" },
        { name: "RBI", field: "totalRBI", width: "60px" },
        { name: "BB", field: "totalBB", width: "60px" },
        { name: "K", field: "totalK", width: "60px" },
        { name: "H", field: "totalH", width: "60px" },
        { name: "2B", field: "total2B", width: "60px" },
        { name: "3B", field: "total3B", width: "60px" },
        { name: "HR", field: "totalHR", width: "60px" }
    ]
}, "grid");
</script>
【示例】


子行


现在我们已经定义好了所有需要显示的数据字段,但看起来并不是很舒服。子行可以使某些数据更易阅读、更易理解。要定义子行,需要给DataGrid传一个单元格定义的数组的数组。子行允许我们在

单元格定义中使用两个新的属性:rowSpan定义了一个单元格占用多少子行,而colSpan则定义了一个单元格占用多少列。


注意:colSpan不能在第一个子行的单元格中定义,这是因为DataGrid使用了table-layout: fixed;样式来加速行的渲染。

grid = new dojox.grid.DataGrid({
    store: store,
    query: { id: "*" },
    structure: [
        [
            { name: "First Name", field: "first", width: "84px", rowSpan: 2 },
            { name: "Last Name", field: "last", width: "84px", rowSpan: 2 },
            { name: "Bats", field: "bats", width: "70px", rowSpan: 2 },
            { name: "Throws", field: "throws", width: "70px", rowSpan: 2 },
            { name: "G", field: "totalG", width: "60px" },
            { name: "AB", field: "totalAB", width: "60px" },
            { name: "R", field: "totalR", width: "60px" },
            { name: "RBI", field: "totalRBI", width: "60px" },
            { name: "BB", field: "totalBB", width: "60px" },
            { name: "K", field: "totalK", width: "60px" }
        ],[
            { name: "Games as Batter", field: "totalGAB", colSpan: 2 },
            { name: "H", field: "totalH" },
            { name: "2B", field: "total2B" },
            { name: "3B", field: "total3B" },
            { name: "HR", field: "totalHR" }
        ]
    ]
}, "grid");
【示例】


视图


我们已经让数据变得易读一些了,但是,一旦你将grid滚动到最右端,你就无法看到每条记录对应的球员是谁了。通过编写一个视图定义,我们能够锁定一组列,避免它们被左右滚动,从而始终保持可见。一个视图定义是一个具有如下特定属性的对象:
  • cells:一个单元格定义的数组、或这个数组的数组
  • noscroll:一个布尔值,当为true时该视图不显示滚动条(横向纵向都不显示——译者注)
  • width:设置视图宽度的CSS宽度字符串。这个宽度只有在单元格宽度采用的是相对值(例如百分比)的时候才有效
grid = new dojox.grid.DataGrid({
    store: store,
    query: { id: "*" },
    structure: [
        {
            noscroll: true,
            cells: [
                { name: "First Name", field: "first", width: "84px" },
                { name: "Last Name", field: "last", width: "84px" }
            ]
        },{
            cells: [
                [
                    { name: "Bats", field: "bats", width: "70px", rowSpan: 2 },
                    { name: "Throws", field: "throws", width: "70px", rowSpan: 2 },
                    { name: "G", field: "totalG", width: "60px" },
                    { name: "AB", field: "totalAB", width: "60px" },
                    { name: "R", field: "totalR", width: "60px" },
                    { name: "RBI", field: "totalRBI", width: "60px" },
                    { name: "BB", field: "totalBB", width: "60px" },
                    { name: "K", field: "totalK", width: "60px" }
                ],[
                    { name: "Games as Batter", field: "totalGAB", colSpan: 2 },
                    { name: "H", field: "totalH" },
                    { name: "2B", field: "total2B" },
                    { name: "3B", field: "total3B" },
                    { name: "HR", field: "totalHR" }
                ]
            ]
        }
    ]
}, "grid");
【示例】

视图定义还提供了一个很有用的属性,能够减少冗余代码:defaultCell。这个属性允许你定义默认的单元格属性,如果单元格定义中没有同名属性,那么DataGrid将自动采用这些属性:
grid = new dojox.grid.DataGrid({
    store: store,
    query: { id: "*" },
    structure: [
        {
            noscroll: true,
            defaultCell: { width: "84px" },
            cells: [
                { name: "First Name", field: "first" },
                { name: "Last Name", field: "last" }
            ]
        },{
            defaultCell: { width: "60px" },
            cells: [
                [
                    { name: "Bats", field: "bats", width: "70px", rowSpan: 2 },
                    { name: "Throws", field: "throws", width: "70px", rowSpan: 2 },
                    { name: "G", field: "totalG" },
                    { name: "AB", field: "totalAB" },
                    { name: "R", field: "totalR" },
                    { name: "RBI", field: "totalRBI" },
                    { name: "BB", field: "totalBB" },
                    { name: "K", field: "totalK" }
                ],[
                    { name: "Games as Batter", field: "totalGAB", colSpan: 2 },
                    { name: "H", field: "totalH" },
                    { name: "2B", field: "total2B" },
                    { name: "3B", field: "total3B" },
                    { name: "HR", field: "totalHR" }
                ]
            ]
        }
    ]
}, "grid");
【示例】
可见,通过在defaultCell中设置width属性,我们只需要为不同于这个默认值的列设置width属性即可。


注意:如果单元格定义里和默认设置里都没有指定,那么列的默认宽度是6em。


分页与虚拟滚动


由于历史原因,当一大堆数据需要显示时,开发者会采用一种称为“分页”的技术:任一时刻只有一小部分(大约25-50条记录)数据才会被显示。用户可以使用按钮或其他控件在“页面”之间切换。

但有了滚轮(也有人会说鼠标)之后,分页控件就显得有点笨重了。

DataGrid采用了一种略微不同的技术,称为虚拟滚动:分页浏览时,用户只需要滚动滚轮即可。这种技术被称为“虚拟滚动”是因为虽然看起来有很长的一串记录,但任一时刻却只有很小一部分数据被渲染出来。然而,DataGrid仍然使用了分页技术,当用户滚动时,数据被一页一页地从服务器(或者dojo的store数据源)请求过来。而且,默认情况下最近渲染的三页数据被原封不动地保留着,以防用户回滚到原来的地方。每页数据的行数可以由DataGrid的rowsPerPage属性控制,而需要暂时保留渲染结果的行数则由keepRows属性控制。

注意:要计算DataGrid将保留几页数据,只需要算keepRows除以rowsPerPage就行了。


结论


dojox.grid.DataGrid是一个强大的组件,它既可以渲染庞大的数据集,也能够显示由子行构成的复杂结构。而且它还让用户无需点击任何控件,单凭滚动滚轮即可浏览长列表。在下一篇教程中,我们将研究dojox.grid.DataGrid是如何与dojo的数据源data store整合的。

参考

DataGrid官方文档



dojo的datagrid使用 一个dojo的datagrid的使用方面注意以及提醒的例子,包含datagrid的分页算法demo 立即下载

相关推荐

【校招】SHL 的 General Ability (GA, 通用能力测试)

SHL 的 General Ability (GA, 通用能力测试) 文章目录SHL 的 General Ability (GA, 通用能力测试)1、归纳推理题1.1 圈圈线条推理1.2 图形颜色位置推理1.3 箭头指向推理2. 数字推理题攻略3. 语言推理题 1、归纳推理题   归纳推理题我把它总结为三种类型:圈圈线条推理;图形颜色位置推理;箭头指向推理。 1.1 圈圈线条推理   你别看这个题目看起来很复杂,其实很简单,而且这个题型的题目背后原理都一样!我把我的 tips 偷偷分享给你们嘿嘿~先从 A

Sunnyside_ 2万+

dojo应用之dataGrid

这次项目中,应用例子的总结,该篇文章主要总结datagrid的使用方法。 代码如下: &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt; &lt;HTML&gt; &lt;HEAD&gt; &lt;meta h...

iteye_1256的博客 197

CosyVoice 本地部署详细教程 手把手小白教程

本文提供了详细的CosyVoice本地部署教程,强调了避免中文名称和空格的重要性,并列出了必要的软件安装步骤,包括CUDA、cuDNN、Git和Miniconda。教程涵盖了从检查CUDA版本到下载模型和运行模型的全过程,确保用户能够顺利部署并使用CosyVoice。

huazn612的博客 2万+

dojo学习总结-dojox.grid.DataGrid

dojo学习总结-dojox.grid.DataGrid 一、使用场景 服务端获得的DataTable转化为Json格式后传递给客户端dojo,dojo将json数据直接绑定在dojox.grid.DataGrid上 二、基本用法 1.客户端页面DataToJson.aspx返回一个Json数据 private void Json() { ...

shuangmubuchenglin的博客 402

H3C交换机Console口连接全攻略:从接线到PuTTY配置(附常见问题排查)

本文详细介绍了H3C交换机Console口的连接与配置方法,包括硬件线缆选择、驱动安装、PuTTY参数设置及常见问题排查。特别针对Console转USB线缆的兼容性和驱动安装难点提供实用建议,帮助网络工程师快速掌握串联调试技巧,解决连接中的黑屏、乱码等典型问题。

weixin_42549451的博客 674

银河麒麟V10ARM架构服务器离线安装docker\nacos【附安装包】

本文分享了在银河麒麟ARM64操作系统上安装Docker和Nacos的完整过程。首先提供了Docker的自动化安装脚本,包含服务配置、存储路径设置等关键步骤,并给出了常用维护命令。接着详细介绍了通过Docker-compose部署Nacos的方法,包括镜像导入、配置文件修改、鉴权设置等注意事项,特别强调了密钥长度必须超过32个字符的要求。文章还提供了Nacos初次登录的注意事项,并预告了后续可能推出的Redis、Nginx等安装教程。所有配置文件和脚本均可直接下载使用,适合内网环境下国产操作系统的部署

weixin_39054697的博客 2344

dojox.grid.DataGrid 编程篇(2) -- 方法与事件

dojox.grid.DataGrid 组件还提供了一些方法,使用者利用这些方法可以进一步丰富表格的表现体验。1. 获取、修改任一单元格的数据:取得第3行,字段"f3"的值var grid = dijit.byId("grid1"); var row = grid.getItem(3); // 获取值 var value = grid.store.getValue(row, "f3"); // 修

Lullaby's Blog 8502

FastAdmin框架Token验证实战:从登录到API调用的完整流程

本文详细解析了在FastAdmin框架中实现Token验证的完整流程,从数据表设计、登录接口签发Token,到核心验证中间件的编写与路由配置,并探讨了在业务API中的调用与安全实践。内容涵盖Token生成策略、有效期管理及安全增强措施,为开发者提供了一套可落地的API身份验证解决方案。

nnn11的博客 917

DataGrid 控件中的汇总行

查看 Summary.cs查看 Summary.aspxASP.NET DataGrid 控件呈现一个多列、完全模板化的网格,它是 .NET 框架中所有数据绑定 Web 控件中最通用和最灵活的控件。DataGrid 的用户界面在某种程度上类似于 Microsoft Excel 工作表。尽管 DataGrid 具有高级的编程接口以及完整的属性集,但是它只生成包含交错超级链接的 HTML 表,

hychieftain(不同)的blog 2806

直击高频编程考点:字符串知识及经典算法题总结

字符串相关基本练习题总结(最长公共子串、最长回文子串、最长无重复字符子串、最小覆盖子串、字符串相乘、中文数字表达转实际数字格式等)

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

【光子 AI】AI Agent 知识体系深度研究报告

从理论基础到前沿应用:全面解析人工智能代理的核心架构、关键技术与发展趋势📅 2026 年 3 月 | 📊 深度研究报告 | 🔬 人工智能领域 | 📈 前沿技术分析**AI Agent(人工智能代理)**是一种能够感知环境、基于所获得的信息做出决策,并执行行动以影响该环境的软件系统。AI Agent 的设计旨在模仿或实现智能行为,它们可以在各种环境中操作,包括物理世界和虚拟空间。随着大语言模型(LLM)技术的突破性进展,AI Agent 正从实验室研究快速走向产业应用。根据 Gartner 发布的《2

AI天才研究院 177

AI资讯简报的实战设计逻辑:从信息过载到可行动信号

在AI技术爆发式迭代的背景下,'AI newsletter'已不再只是内容聚合,而是面向一线开发者的决策支持系统。其核心原理在于构建一套‘技术可用性’过滤机制——通过GitHub Stars、Hugging Face下载量、跨行业集成案例等客观指标识别真实技术拐点,并以工作流嵌入可行性为最终标尺。这种设计显著提升信息转化率,将抽象能力转化为时间成本、认知成本与维护成本等可量化维度,支撑产品经理快速评估接入价值、开发者三天内完成API验证、内容创作者精准缩短初稿周期。本文聚焦于这类高信噪比简报背后的筛选逻辑、

cunbei2644的博客 519

滴滴数据分析80道面试题及参考答案

常见的模型评价指标有准确率、召回率、F1 值、均方误差、均方根误差、R 方等。准确率是指模型预测正确的样本数占总样本数的比例,它反映了模型预测的准确性。召回率是指模型预测为正例的样本中实际为正例的比例,它衡量了模型对正例的捕捉能力。F1 值是准确率和召回率的调和平均数,综合考虑了两者的平衡。均方误差是预测值与真实值之差的平方的平均值,它衡量了模型预测值与真实值的平均偏离程度。均方根误差是均方误差的平方根,与均方误差类似,但更直观地反映了误差的大小。

大模型大数据攻城狮的专栏 1698

dojox.grid.DataGrid 编程篇(1) -- Layout设计

最近使用了dojo组件,其中使用了 dojox.grid.DataGrid 进行一览表示的核心组件,这里总结一些实际使用中遇到的问题和解决方法。官方Guide: http://dojotoolkit.org/reference-guide/1.8/dojox/grid/DataGrid.html【准备】引用 DataGrid 的 CSS,dojo js,导入要使用的组件: dojo

Lullaby's Blog 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

从零开始学_JavaScript_系列(十)——dojo(3)(GRID表格创建、样式、列宽可变、排序、过滤器)...

如果没有接触过dojo,建议阅读: http://blog.csdn.net/qq20004604/article/details/51028702 里面介绍了如何加载dojo。(当然,本篇也考虑了未使用过dojo的人,可以只阅读该链接关于dojo下载的部分,以获得dojo) 关于dojo的下载,请查看: https://dojotoolkit.o...

weixin_33841503的博客 400

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

dojo学习教程

Dojo 作为最著名的 Ajax 开源项目之一,不仅让 Web 程序员可以免费获得和使用其框架进行 Web 应用的开发,更吸引了大量的开发者对其不断的扩充,开发新的组件。DojoX 就是在这样的开发社区中产生的。DojoX 是一组基于 dojo 的开源项目的集合,这些开源项目具有很好的创意和很高的实用性。这些 DojoX 项目有可能成长为一个稳定的版本保留在 DojoX 中,也有些可能会迁移到 D...

weixin_30662539的博客 331

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

掌握 Dojo 工具包

Dojo 作为最著名的 Ajax 开源项目之一,不仅让 Web 程序员可以免费获得和使用其框架进行 Web 应用的开发,更吸引了大量的开发者对其不断的扩充,开发新的组件。DojoX 就是在这样的开发社区中产生的。DojoX 是一组基于 dojo 的开源项目的集合,这些开源项目具有很好的创意和很高的实用性。这些 DojoX 项目有可能成长为一个稳定的版本保留在 DojoX 中,也有些可能会迁移到 D

qq_15117745的专栏 907

Dojo DataGrid 分页

核心JS分页代码: /** * 刷新网格数据 * * @param response AJAX响应 * @param trash 支持批量操作 * @return */ function gridRefresh(response, trash) { // 释放内存 gridStore = null; gridLayout.setStore...

roomy 355

dojo DataGrid使用一

dojo DataGrid使用(-)-----------通过html静态构建grid Insert title here      @import "js/dojo/dojox/grid/resources/tundraGrid.css";    @import "js/dojo/dojo/resources/dojo.css";

wangli61289的专栏 3707

dojo Grid用法总结

DataGrid、EnhancedGrid都有noDataMessage属性,可以设置这个属性来显示提示信息,例如: noDataMessage : "本单位当前无用户信息!" 要让这个属性起作用,store属性不能为null,而应该是size为0,即[] 假如,java中的ArrayList给grid提供数据,通过jsonrest,那么当没有数据时,应当return new Array

earthhour的专栏 5680

dojo表格操作的简单示例(建立表格)

代码示例: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <link rel="stylesheet" href="js/dojo/dojo/resou...

weixin_34144848的博客 269

CSS 盒子模型与背景渐变、文字渐变实战

content(内容区):文字、图片等实际内容占据的区域padding(内边距):内容与边框之间的空白border(边框):盒子的边界margin(外边距):盒子与其他盒子之间的间距fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;margin 外边距border 边框padding 内边距content 内容区。

2601_96876853的博客 241
上一篇: Dojo 1.6 官方教程: 理解Dijit Widget系统的基础架构
下一篇: 深入HTML5: HTML5 本地存储( Local Storage )的前世今生 (一)
dojotoolkit
博客等级 码龄16年 1205粉丝 61原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值