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;
}
});
-- 本章结束 --
分享到:
相关推荐
2. **dojox模块**:dojox是Dojo框架的一个扩展部分,包含了许多非核心但有用的模块和组件,如dojox.form.FileUploader。 3. **dojox.form.FileUploader组件**:该组件提供了一个用户友好的界面,允许用户选择并上传...
标题中的“用DOJO中的dojox.gfx做甘特图”表明了本文将探讨如何利用DOJO框架的dojox.gfx模块来创建甘特图。dojox.gfx是DOJO的一个图形库,提供了丰富的图形绘制功能,支持矢量图形的创建,非常适合用于制作图表、...
Dojo Toolkit是JavaScript的一个强大的、模块化的开发框架,其中的dojox.gfx库为浏览器端的2D图形提供了抽象层,支持多种渲染后端,如SVG、VML、Canvas和Silverlight。 这个开源项目“SVG to dojox.gfx Convertor”...
Uploader(dojox.form.Uploader),它具有一个可定制样式的fileinput按钮,可使用多文件选择模式,且完全基于HTML元素。在不支持HTML5的浏览器中,该控件可以自动切换到使用Flash或者iframe。Fileinput之所以叫...
在Dojo 1.x版本中,`dojox.grid`模块通常包含在`Grid.html`或`DataGrid.html`文件中,而不是单独的`Grid.js`。检查`/zstudio/testdojo/dojoroot/dojox/grid/`目录,确保包含正确的文件。 2. **版本不匹配**:如果...
vgolive.search.PagingGrid的兼容性意味着它可以与dojox.data提供的各种数据集格式一起工作,如QueryReadStore和MemoryStore。这些数据集可以动态加载或预先存在,满足不同应用场景的需求。 压缩包中的"doc.pdf...
创建DataGrid时,首先需要创建一个`dojox/grid/DataGrid`实例,并指定其配置对象。配置对象通常包含以下属性: - `store`: 数据源,可以是Dojo的任何类型的数据存储。 - `columns`: 定义列的结构和内容,每个列...
4. **自定义模板**:通过使用dojox.grid.cells和dojox.grid.cells._Base,开发者可以创建自定义单元格类型,从而实现特殊格式或行为。这些例子可能包含如何显示日期、货币或其他复杂格式的单元格。 5. **编辑功能**...
DojoX包含了如dojox.charting用于绘制统计图表,dojox.collections提供集合数据结构,dojox.encoding实现了加密功能,dojox.math包含数学函数,dojox.reflect提供反射功能,dojox.storage支持本地数据存储,dojox....
* dojox.collections:集合数据结构库,提供了 List、Query、Set、Stack、Dictionary 等功能。 * dojox.encoding:加密功能的 API,支持 Blowfish、MD5、Rijndael、SHA 等加密算法。 * dojox.math:数学函数库,提供...
2. **`dojox/grid/_EditManager.js`**:第 93 行的 `setEditCell` 方法可能无法正确设置待编辑的单元格。 3. **`dojox/grid/_Grid.js`**:第 933 行的 `updateRow` 方法可能导致渲染错误。 4. **`dojox/grid/cells/...
- dojox.collections:提供了实用的集合数据结构,如List、Query、Set、Stack、Dictionary。 - dojox.encoding:提供加密功能的API,包括Blowfish、MD5、Rijndael、SHA算法。 - dojox.math:数学函数库,如曲线、...
- `dojox.collections`:提供高级数据结构,如列表、查询、集合等。 - `dojox.encoding`:加密API,支持多种算法。 - `dojox.math`:数学函数库。 - `dojox.storage`:本地存储功能。 - `dojox.xml`:XML解析...
最接近的模拟是 dojox.image.Gallery (dojox.image.ThumbnailPicker+dojox.image.SlideShow),但是 kGallery 不需要下载几十个带有 dojo 库代码的 JavaScript 文件。 kGallery 包含 kSlideshow 和 kThumbnailPicker...
- **dojox.collections**:提供有用的集合数据结构,如 List、Query、Set、Stack、Dictionary。 - **dojox.encoding**:加密功能 API,如 Blowfish、MD5、Rijndael、SHA。 - **dojox.math**:数学函数,如曲线、点、...
16. **dojox.collections**:提供了集合类的操作,如列表、字典等。 17. **dojox.encoding**:编码解码相关的API,如加密算法的实现。 18. **dojox.math**:数学计算相关的功能。 19. **dojo.reflect**:提供了反射...
- **dojox.encoding**:加密功能API,支持Blowfish、MD5、Rijndael、SHA等加密算法。 - **dojox.math**:数学函数库。 - **dojo.reflect**:提供反射功能的函数库。 - **dojox.storage**:用于将数据保存在本地存储...
- **dojox.collections**:提供了多种集合数据结构,如List、Set等。 - **dojox.encoding**:加密API,支持Blowfish、MD5等算法。 - **dojox.math**:数学计算库。 - **dojo.reflect**:反射功能库。 - **...
var grid = new dojox.grid.EnhancedGrid({ id: "grid", store: store, structure: [ // 列定义... ], plugins: { pagination: { pageSizes: ["10", "25", "50", "All"], defaultPageSize: 10, ...