微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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");
// 修改值
grid.store.setValue(row,"f3","abc");
或者直接写为
var grid = dijit.byId("grid1");
var row = grid.getItem(3);
var value = row["f3"];
注意:认情况下,每次修改值都会导致Grid该行刷新

2. 获取(取消)选中行
var grid = dijit.byId("grid1");
var selectedRows = grid.selection.getSelected();
var value = selectedRows[0]["f3"];
因为支持多选,所以 grid.selection.getSelected 返回的是选中的行数组。
// 获得选择的第一行
grid.selection.getFirstSelected();
// 清除所有选中行
grid.selection.deselectAll();
// 选中第n行
grid.selection.select(4);

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

4. 将某一行显示在视图中
// 滚动显示出第4行
grid.scrollToRow(3);

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

6. 改变行的显示 onStyleRow (参数:row对象)
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 对象)
 dojo.connect(grid,"onRowClick",function(e) {
    alert(e.rowIndex);
 });

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

8. 行选择事件 onSelected (参数: row index)
 dojo.connect(grid,"onSelected",function(index) {
    alert(index);
 });
如果选择行发生变化时会被触发。

9. 单元格点击事件 onCellClick (参数: Event 对象)
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. 全选择的代码示例:
<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点击时触发下面的方法
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 实际中设置回去。
 dojo.connect(grid,"onResizeColumn",function(cellIdx) {
     dojo.byId("chk").checked = cacheCheck;
 });


11. 变化通知
当使用编辑列的时候,可以利用数据源的变更通知
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;
    }
});
-- 本章结束 --

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我有一个网格,可以根据更大的树结构编辑小块数据.为了更容易知道用户保存了什么,我希望当用户第一次看到网格时,网格处于不可编辑状态.当用户准备好后,他们可以单击编辑按钮,这将使网格的某些部分可编辑.然后,有一个保存或取消按钮可以保存更改或还原.在大多数情况下它是有效的.但
我即将开始开发一款教育性的视频游戏.我已经决定以一种我可以轻松打包为Web,Mobiles和可能的Standalone版本的方式来实现这一目标.我不想使用Flash.因此,我确信(无论如何我会听取建议)使用JavaScript和SVG.我正在对这个问题进行大量研究,但我很难把各个部分放在一起.我知道Raphae
我正在使用带有Grails2.3.9的Dojo1.9.DojoNumberTextBox小部件–我在表单中使用–将固定格式(JavaScript基本格式)的实数值(例如:12.56)设置为HTML表单输入字段(但根据浏览器区域设置显示/编辑它们,所以用户总是看到格式正确的数字).另一方面,Grails期望输入字段根据浏览器
1.引言鉴于个人需求的转变,本系列将记录自学arcgisapiforjavaScript的学习历程,本篇将从最开始的arcgisapiforjavaScript部署开始,个人声明:博文不在传道受业解惑,旨在方便日后复习查阅。由于是自学,文章中可能会出现一些纰漏,请留言指出,不必留有情面哦!2.下载ArcGISforDe
我正在阅读使用dojo’sdeclare进行类创建的语法.描述令人困惑:Thedeclarefunctionisdefinedinthedojo/_base/declaremodule.declareacceptsthreearguments:className,superClass,andproperties.ClassNameTheclassNameargumentrepresentsthenameofthec
我的团队由更多的java人员和JavaScript经验丰富组成.我知道这个问题曾多次被问到,但为了弄清楚我的事实,我需要澄清一些事情,因为我在客户端技术方面的经验非常有限.我们决定使用GWT而不是纯JavaScript框架构建我们的解决方案(假设有更多的Java经验).这些是支持我的决定的事实.>
路由dojo/framework/srcouting/README.mdcommitb682b06ace25eea86d190e56dd81042565b35ed1Dojo应用程序的路由路由FeaturesRoute配置路径参数RouterHistoryManagersHashHistoryStateHistoryMemoryHistoryOutletEventRouterContextInjectionOutl
请原谅我的无知,因为我对jquery并不熟悉.是否有dojo.connect()的等价物?我找到了这个解决方案:http:/hink-robot.com/2009/06/hitch-object-oriented-event-handlers-with-jquery/但是没有断开功能!你知道jquery的其他解决方案吗?有jquery.connect但这个插件在我的测试中不起作用.
与java类一样,在dojo里也可以定义constructor 构造函数,在创建一个实例时可以对需要的属性进行初始化。//定义一个类mqsy_yjvar mqsy_yj=declare(null,{     //thedefaultusername    username: "yanjun",          //theconstructor   
我一直在寻找一些最佳实践,并想知道Dojo是否具有框架特定的最佳实践,还是最好只使用通用的Javascript标准?特别是我主要是寻找一些功能和类评论的指导方针?解决方法:对于初学者来说,这是项目的风格指南:DojoStyleGuide