`
云水禅心
  • 浏览: 26249 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

dojox.grid.DataGrid 编程篇(1)

    博客分类:
  • dojo
阅读更多
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,导入要使用的组件:
[html] view plaincopy

    <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.8.0/dojo/resources/dojo.css"> 
    <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.8.0/dojox/grid/resources/claroGrid.css"> 
    <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.8.0/dijit/themes/claro/claro.css"> 
         
    <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.8.0/dojo/dojo.js" djConfig="parseOnLoad:true,locale:'ja-jp',isDebug:true"></script> 
    <script type="text/javascript"> 
         
    dojo.require("dojo.data.ItemFileWriteStore"); 
    dojo.require("dojox.grid.DataGrid"); 
    </script> 

注意,<body>的class要设置为对应的theme,比如:<body class=“claro">

【DataGrid的一般属性】
这里我主要使用DOM声明的方式,当然用js定义layout也是可以的。dojo会在window.onload 时解析 dojoType="dojox.grid.DataGrid" 并读取相关属性设置并显示最终的效果。
下面的 <table><thead>...</thead></table> 即为设计时定义 DataGrid 的 layout,运行时被 dojo 解析生成实际的 HTML。
[javascript] view plaincopy

    function getDataStore(count) { 
        var items = []; 
        for(var i=0; i<count; i++) { 
           items.push({ 
             f0: false, 
             f1: i%2==0?"field1_ 1 " + i:"1", 
             f2: "field2_" + i, 
             f3: "field3_" + i, 
             f4: "field4_" + i, 
             f5: "field5_" + i, 
             f6: "field6_" + i, 
             f7: "field7_" + i 
           }); 
        } 
        var data = new dojo.data.ItemFileWriteStore({data: {items:items}}); 
        return data; 
    } 

[html] view plaincopy

    <table dojoType='dojox.grid.DataGrid' id='grid1' jsid='js_grid1'  
     style='border:1px #a8a8a8 solid;width:450px;height:200px;' store="getDataStore(10)" 
     canSort='false' selectionMode='single' > 
     <thead> 
        <tr> 
          <th field="f1" cellStyles="text-align:center;" width="100px" >列1</th> 
          <th field="f2" cellStyles="text-align:center;" width="100px" >列2</th> 
          <th field="f3" cellStyles="text-align:center;" width="100px" >列3</th> 
          <th field="f4" cellStyles="text-align:center;" width="100px" >列4</th> 
          <th field="f5" cellStyles="text-align:center;" width="100px" >列5</th> 
          <th field="f6" cellStyles="text-align:center;" width="100px" >列6</th> 
        </tr> 
    </thead> 
    </table> 


■DataGrid 属性(table 里的属性)
dojoType: dojox.grid.DataGrid (定义dojo组件的类型,这里当然是 dojox.grid.DataGrid 或者是 DataGrid 的继承类)
structure: js定义的表格
store: 数据源,可以是:dojo.data.ItemFileReadStore (只读),dojo.data.ItemFileWriteStore (可写)等
selectionMode: 表格的选择方式:
     none(不选择),
     single(单行选择),
    multiple(多选,点一行加一行的选择),
    extended(扩展选择,按下ctrl键+选择,增加选择行)(默认方式)
sortInfo: 设置排序的方式:升序,降序
canSort: 可以指定那一列排序或者不能排序
rowHeight: 定义行高,这是一个重要属性(对性能有影响)
rowsPerPage: 一次加载的每页的行数(默认: 25行)
columnReordering: 允许拖拽调整列的顺序(默认: false)

...

■DataGrid的Cell属性
field: 对应数据源里的列
width: 宽度定义,可以用px 或者 %
formatter: 设定一个 js function,返回 HTML 用于再次编辑显示内容
比如为某列加上个link:
<th field="f1" formatter="addLink">field1</th>
[javascript] view plaincopy

    function addLink(value, index) { 
        return "<a href='javascript:void(0);'>" + value + "</a>"; 
    } 

styles: 列(表头和明细)的style定义
headStyles: 表头的style定义
cellStyles: 明细的style定义 (正如上面的示例,表头默认左对齐,明细定义为居中对齐)
classes, headClasses, cellClasses: 同上类似,设置css class
editable: 列是否可编辑(true/false)
cellType: 可编辑时,设定对应的类型(比如:Checkbox, Select, Date等)
get: js function 返回想要在这个单元格里需要显示的值
hidden: 控制该列显示不显示(true/false)
...

接下来看看几种特殊的表格的定义方式:
① 普通的多行组(表头行数=明细行数)

[html] view plaincopy

    <table dojoType='dojox.grid.DataGrid' id='grid2' jsid='js_grid2'  
     style='border:1px #a8a8a8 solid;width:450px;height:200px;' store="getDataStore(10)" 
     selectionMode='single' > 
     <thead> 
        <tr> 
          <th field="f1"  width="25%" >列1</th> 
          <th field="f2"  width="25%" >列2</th> 
          <th field="f3"  width="25%" >列3</th> 
          <th field="f4"  width="25%" >列4</th> 
        </tr> 
        <tr> 
          <th field="f5" >列5</th> 
          <th field="f6" >列6</th> 
          <th field="f7" >列7</th> 
          <th field="f8" >列8</th> 
        </tr> 
    </thead> 
    </table> 


② 多行组+合并单元格(rowspan+colspan)(表头行数=明细行数)


[html] view plaincopy

    <table dojoType='dojox.grid.DataGrid' id='grid3' jsid='js_grid3'  
     style='border:1px #a8a8a8 solid;width:450px;height:200px;' store="getDataStore(10)" 
     selectionMode='single' > 
     <thead> 
        <tr> 
          <th field="f1" rowspan="2" width="25%" >列1</th> 
          <th field="f2" cellStyles="text-align:center;" width="25%" >列2</th> 
          <th field="f4" cellStyles="text-align:center;" width="25%" >列4</th> 
          <th field="f5" cellStyles="text-align:center;" width="25%" >列5</th> 
        </tr> 
        <tr> 
          <th field="f3" cellStyles="text-align:center;" >列3</th> 
          <th field="f6" colspan="2" cellStyles="text-align:center;" >列6</th> 
        </tr> 
    </thead> 
    </table> 


③ 多行组(表头行数<明细行数:表头1行,明细2行一组)
tip: 表头的一行用headStyle隐藏, 但注意仍会留下一行细细的行

[html] view plaincopy

    <table dojoType='dojox.grid.DataGrid' id='grid4' jsid='js_grid4'  
     style='border:1px #a8a8a8 solid;width:450px;height:200px;' store="getDataStore(10)" 
     selectionMode='single' canSort="false"> 
     <thead> 
        <tr> 
          <th field="f1" headStyles="display:hidden" ><div/></th> 
          <th field="f2" headStyles="display:hidden" ><div/></th> 
          <th field="f3" headStyles="display:hidden" ><div/></th> 
          <th field="f4" headStyles="display:hidden" ><div/></th> 
        </tr> 
        <tr> 
          <th field="f1" width="25%">列5</th> 
          <th field="f2" width="25%">列6</th> 
          <th field="f3" width="25%">列7</th> 
          <th field="f4" width="25%">列8</th> 
        </tr> 
    </thead> 
    </table> 


④ 多行组(表头行数>明细行数:表头2行,明细1行)


[html] view plaincopy

    <table dojoType='dojox.grid.DataGrid' id='grid4' jsid='js_grid4'  
     style='border:1px #a8a8a8 solid;width:450px;height:200px;' store="getDataStore(10)" 
     selectionMode='single' canSort="false"> 
     <thead> 
        <tr> 
          <th colspan="2" cellStyles="display:none;">merge 1</th> 
          <th colspan="2" cellStyles="display:none;">merge 2</th> 
        </tr> 
        <tr> 
          <th field="f1" width="25%">列1</th> 
          <th field="f2" width="25%">列2</th> 
          <th field="f3" width="25%">列3</th> 
          <th field="f4" width="25%">列4</th> 
        </tr> 
    </thead> 
    </table> 


⑤ 设置固定列
通过  <colgroup> 定义:
<colgroup span="2" noscroll="true"></colgroup>
<colgroup span="5"></colgroup>

如下图所示,前2列为固定,后面几列可以滚动。


⑥ 多段组+固定列
因为多段组的原因,第2行中要增加一个空列
[html] view plaincopy

    <table jsId="grid" id="grid5" dojoType="dojox.grid.DataGrid"  
         store="getDataStore(10)" style="width:450px;height:240px;"> 
        <colgroup span="1" noscroll="true"></colgroup> 
        <colgroup span="5"></colgroup> 
    <thead> 
      <tr> 
        <th rowspan="2" field="f1" width="80px">列1</th> 
        <th field="f2" width="80px">列2</th> 
        <th field="f3" width="80px">列3</th> 
        <th field="f4" width="80px">列4</th> 
        <th field="f5" width="80px">列5</th> 
        <th field="f5" width="80px">列6</th> 
      </tr> 
      <tr> 
        <strong><th styles="display:none;"></th></strong> 
        <th cellstyles="display:none;">列(2)</th> 
        <th cellstyles="display:none;">列(3)</th> 
        <th cellstyles="display:none;">列(4)</th> 
        <th cellstyles="display:none;">列(5)</th> 
        <th cellstyles="display:none;">列(6)</th> 
      </tr>                             
    </thead>   
    </table> 


分享到:
评论

相关推荐

    多文件上传 dojo组件 dojox.form.FileUploader

    标题中的“多文件上传 dojo组件 dojox.form.FileUploader”是指使用Dojo JavaScript库中的dojox.form.FileUploader组件来实现网页上的多文件上传功能。Dojo是一个强大的JavaScript框架,它提供了丰富的UI组件和工具...

    用DOJO中的dojox.gfx做甘特图

    标题中的“用DOJO中的dojox.gfx做甘特图”表明了本文将探讨如何利用DOJO框架的dojox.gfx模块来创建甘特图。dojox.gfx是DOJO的一个图形库,提供了丰富的图形绘制功能,支持矢量图形的创建,非常适合用于制作图表、...

    SVG to dojox.gfx Convertor-开源

    Dojo Toolkit是JavaScript的一个强大的、模块化的开发框架,其中的dojox.gfx库为浏览器端的2D图形提供了抽象层,支持多种渲染后端,如SVG、VML、Canvas和Silverlight。 这个开源项目“SVG to dojox.gfx Convertor”...

    dojo随手记 gird组件引用

    在Dojo 1.x版本中,`dojox.grid`模块通常包含在`Grid.html`或`DataGrid.html`文件中,而不是单独的`Grid.js`。检查`/zstudio/testdojo/dojoroot/dojox/grid/`目录,确保包含正确的文件。 2. **版本不匹配**:如果...

    使用HTML5实现多文件上传

    Uploader(dojox.form.Uploader),它具有一个可定制样式的fileinput按钮,可使用多文件选择模式,且完全基于HTML元素。在不支持HTML5的浏览器中,该控件可以自动切换到使用Flash或者iframe。Fileinput之所以叫...

    vgolive.search.PagingGrid v1.0 源码

    1. 配置数据源:根据项目需求选择合适的dojo.data或dojox.data数据集格式,并正确设置数据接口。 2. 初始化PagingGrid:设置列宽、分页大小、样式等属性,并指定数据源。 3. 绑定事件:监听用户交互,如翻页、排序等...

    dojo的datagrid使用

    创建DataGrid时,首先需要创建一个`dojox/grid/DataGrid`实例,并指定其配置对象。配置对象通常包含以下属性: - `store`: 数据源,可以是Dojo的任何类型的数据存储。 - `columns`: 定义列的结构和内容,每个列...

    dojo Grid例子

    4. **自定义模板**:通过使用dojox.grid.cells和dojox.grid.cells._Base,开发者可以创建自定义单元格类型,从而实现特殊格式或行为。这些例子可能包含如何显示日期、货币或其他复杂格式的单元格。 5. **编辑功能**...

    DOJO API 中文参考手册,附加注解实例(精心重新排版DOC文档)

    DojoX包含了如dojox.charting用于绘制统计图表,dojox.collections提供集合数据结构,dojox.encoding实现了加密功能,dojox.math包含数学函数,dojox.reflect提供反射功能,dojox.storage支持本地数据存储,dojox....

    dojo api 中文版

    * dojox.collections:集合数据结构库,提供了 List、Query、Set、Stack、Dictionary 等功能。 * dojox.encoding:加密功能的 API,支持 Blowfish、MD5、Rijndael、SHA 等加密算法。 * dojox.math:数学函数库,提供...

    bugfix.txt

    1. **`dojox/grid/TreeGrid.js`**:在第 845 行,`doApplyCellEdit` 方法中对于不同类型值的处理存在缺陷。 2. **`dojox/grid/_EditManager.js`**:第 93 行的 `setEditCell` 方法可能无法正确设置待编辑的单元格。 ...

    DOJO_API_中文参考手册 附加注释实例

    - dojox.collections:提供了实用的集合数据结构,如List、Query、Set、Stack、Dictionary。 - dojox.encoding:提供加密功能的API,包括Blowfish、MD5、Rijndael、SHA算法。 - dojox.math:数学函数库,如曲线、...

    dojo api最好资料

    - `dojox.collections`:提供高级数据结构,如列表、查询、集合等。 - `dojox.encoding`:加密API,支持多种算法。 - `dojox.math`:数学函数库。 - `dojox.storage`:本地存储功能。 - `dojox.xml`:XML解析...

    kGallery:kGallery 是一个使用 jQuery 库在 JavaScript 上编写的画廊。 能够处理数百张图片

    最接近的模拟是 dojox.image.Gallery (dojox.image.ThumbnailPicker+dojox.image.SlideShow),但是 kGallery 不需要下载几十个带有 dojo 库代码的 JavaScript 文件。 kGallery 包含 kSlideshow 和 kThumbnailPicker...

    dojo api 1.0 中文文档

    - **dojox.collections**:提供有用的集合数据结构,如 List、Query、Set、Stack、Dictionary。 - **dojox.encoding**:加密功能 API,如 Blowfish、MD5、Rijndael、SHA。 - **dojox.math**:数学函数,如曲线、点、...

    dojo技术入门ysk

    16. **dojox.collections**:提供了集合类的操作,如列表、字典等。 17. **dojox.encoding**:编码解码相关的API,如加密算法的实现。 18. **dojox.math**:数学计算相关的功能。 19. **dojo.reflect**:提供了反射...

    dojo API pdf

    - **dojox.encoding**:加密功能API,支持Blowfish、MD5、Rijndael、SHA等加密算法。 - **dojox.math**:数学函数库。 - **dojo.reflect**:提供反射功能的函数库。 - **dojox.storage**:用于将数据保存在本地存储...

    DOJO API 中文参考手册,附加注解实例

    - **dojox.collections**:提供了多种集合数据结构,如List、Set等。 - **dojox.encoding**:加密API,支持Blowfish、MD5等算法。 - **dojox.math**:数学计算库。 - **dojo.reflect**:反射功能库。 - **...

    dojo enhancedGrid pagination 分页实现

    var grid = new dojox.grid.EnhancedGrid({ id: "grid", store: store, structure: [ // 列定义... ], plugins: { pagination: { pageSizes: ["10", "25", "50", "All"], defaultPageSize: 10, ...

Global site tag (gtag.js) - Google Analytics