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

dojox.grid.DataGrid 编程篇(2)

    博客分类:
  • dojo
阅读更多

dojox.grid.DataGrid 编程篇(2) -- 方法与事件
dojox.grid.DataGrid 组件还提供了一些方法,使用者利用这些方法可以进一步丰富表格的表现体验。

1. 获取、修改任一单元格的数据:
取得第3行,字段"f3"的值
[javascript] view plaincopy

    var grid = dijit.byId("grid1"); 
    var row = grid.getItem(3); 
    // 获取值 
    var value = grid.store.getValue(row, "f3"); 
    // 修改值 
    grid.store.setValue(row, "f3", "abc"); 

或者直接写为
[javascript] view plaincopy

    var grid = dijit.byId("grid1"); 
    var row = grid.getItem(3); 
    var value = row["f3"]; 

注意:默认情况下,每次修改值都会导致Grid该行刷新

2. 获取(取消)选中行
[javascript] view plaincopy

    var grid = dijit.byId("grid1"); 
    var selectedRows = grid.selection.getSelected(); 
    var value = selectedRows[0]["f3"]; 

因为支持多选,所以 grid.selection.getSelected 返回的是选中的行数组。
[javascript] view plaincopy

    // 获得选择的第一行 
    grid.selection.getFirstSelected(); 
    // 清除所有选中行 
    grid.selection.deselectAll(); 
    // 选中第n行 
    grid.selection.select(4); 


3. 设置单元格焦点
[javascript] view plaincopy

    // 设置第一行,第二列的单元格的焦点 
    grid.focus.setFocusIndex(0, 1); 


4. 将某一行显示在视图中
[javascript] view plaincopy

    // 滚动显示出第4行 
    grid.scrollToRow(3); 


5. 隐藏某一列
[javascript] view plaincopy

    // 隐藏第五列 
    grid.layout.setColumnVisibility(4, false); 


6. 改变行的显示 onStyleRow (参数:row对象)
[javascript] view plaincopy

    dojo.connect(grid, "onStyleRow", function(row) { 
       // 第二行背景设为红色 
       if (row.index == 1) { 
          row.customClasses += " redRow "; 
       } 
    }); 
    grid.resize(); 
     
    <style type="text/css"> 
    .redRow tr { background-color: red !important; } 
    </style> 



7. 行点击事件 onRowClick (参数: Event 对象)
[javascript] view plaincopy

    dojo.connect(grid, "onRowClick", function(e) { 
       alert(e.rowIndex); 
    }); 


另外:Enter键也能触发 onRowClick 事件。
不过这里有个Bug,上下键移动时,选择行不会跟随,这时候按下Enter时 e.rowIndex === undefined。后面会介绍如何解决这个Bug。
(改进的 EnhancedGrid 上下键移动时,选择行会跟随)

8. 行选择事件 onSelected (参数: row index)
[javascript] view plaincopy

    dojo.connect(grid, "onSelected", function(index) { 
       alert(index); 
    }); 

如果选择行发生变化时会被触发。

9. 单元格点击事件 onCellClick (参数: Event 对象)
[javascript] view plaincopy

    dojo.connect(grid, "onCellClick", function(e) { 
       console.log("[" + e.rowIndex + "," + e.cellIndex + "]"); 
       //rowIndex=-1 为表头 
       if (e.rowIndex < 0) return; 
       e.cellNode.style.backgroundColor = "red"; 
    }); 


10. 全选择的代码示例:
[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' editable="true" selectionMode='extended' selectable="false" > 
      <colgroup span="1" noscroll="true"></colgroup> 
      <colgroup span="6"></colgroup> 
     <thead> 
        <tr> 
          <th field="f0" cellStyles="text-align:center;" width="50px" editable="true" cellType="dojox.grid.cells.Bool" alwaysEditing="true"> 
            <div style="text-align:center;"> 
                <label for="chk">选择</label><br/><input type="checkbox" id="chk" onclick="changeAll(this)"> 
            </div> 
          </th> 
          <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" formatter="addLink">列6</th> 
        </tr> 
    </thead> 
    </table> 

JavaScript:表头的Checkbox点击时触发下面的方法。
[javascript] view plaincopy

    function changeAll(checkbox) { 
        var grid = dijit.byId("grid1"); 
        for(var i=0, row; (row=grid.getItem(i)); i++) { 
            grid.store.setValue(row, "f0", checkbox.checked); 
        } 
    } 

注意:在表格列宽变化时(即拖拽调整列宽)会导致Grid重绘,因此上面用 cacheCheck 来保持表头的Checkbox的checked状态。
在 onResizeColumn 实际中设置回去。
[javascript] view plaincopy

    dojo.connect(grid, "onResizeColumn", function(cellIdx) { 
        dojo.byId("chk").checked = cacheCheck; 
    }); 



11. 变化通知
当使用编辑列的时候,可以利用数据源的变更通知:
[javascript] view plaincopy

    grid._isChanged = false; 
    dojo.connect(grid.store, "onSet", function(item, attr, oldVal, newVal) { 
        if (oldVal == null) 
            oldVal = ""; 
        if (oldVal != newVal) { 
            dojo.byId("divMsg").innerHTML = attr + ":" + oldVal + "->" + newVal; 
            grid._isChanged = true; 
        } 
    }); 



--  本章结束 --

分享到:
评论

相关推荐

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

    2. **dojox模块**:dojox是Dojo框架的一个扩展部分,包含了许多非核心但有用的模块和组件,如dojox.form.FileUploader。 3. **dojox.form.FileUploader组件**:该组件提供了一个用户友好的界面,允许用户选择并上传...

    用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”...

    使用HTML5实现多文件上传

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

    dojo随手记 gird组件引用

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

    vgolive.search.PagingGrid v1.0 源码

    vgolive.search.PagingGrid的兼容性意味着它可以与dojox.data提供的各种数据集格式一起工作,如QueryReadStore和MemoryStore。这些数据集可以动态加载或预先存在,满足不同应用场景的需求。 压缩包中的"doc.pdf...

    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

    2. **`dojox/grid/_EditManager.js`**:第 93 行的 `setEditCell` 方法可能无法正确设置待编辑的单元格。 3. **`dojox/grid/_Grid.js`**:第 933 行的 `updateRow` 方法可能导致渲染错误。 4. **`dojox/grid/cells/...

    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