【原】提高篇:第二十五篇,ext2.2打造全新功能grid系列--右键菜单篇

本文介绍如何在grid列表里 在某行上面单击右键弹出菜单的功能

先看看效果图:

如上图所示,具体菜单的功能没有去实现,这里和前几篇的后台都极为类似,有需要后台代码的朋友只需要浏览前几篇即可.

下面仅仅列出页面的设计代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="gridContextMenu.aspx.cs" Inherits="gridContextMenu" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
    <link rel="Stylesheet" type="text/css" href="ExtJS/resources/css/ext-all.css" />
    <link rel="Stylesheet" type="text/css" href="ExtJS/resources/css/xtheme-green.css" />
    <script type="text/javascript" src="ExtJS/adapter/ext/ext-base.js"></script>
    <script type="text/javascript" src="ExtJS/ext-all.js"></script>
    <script type="text/javascript" src="ExtJS/ext-lang-zh_CN.js"></script>
    <style type="text/css">
    .panel_icon11 { background-image:url(images/first.gif)}
    .center_icon { background-image:url(images/center.png)}
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <script type="text/javascript">   
    function ready()
    {
        var url = "jsonGrid.aspx?Param=select";
        var sm = new Ext.grid.CheckboxSelectionModel();        
        var cm = new Ext.grid.ColumnModel
        ([       
            sm,new Ext.grid.RowNumberer({header:"编号",width:50}),
            {header:"编号",dataIndex:"ID",width:10,hidden:true},
            {header:"标题",dataIndex:"TypeCName",width:100,editor:new Ext.form.TextField()},
            {header:"英文名称",dataIndex:"TypeEName",width:100,editor:new Ext.form.TextField()},
            {header:"状态",dataIndex:"DelFlag",width:100,renderer:function(value){if(value==false) {return "显示";} else {return "隐藏";}}},
            {header:"添加日期",dataIndex:"AddDate",width:100,renderer:Ext.util.Format.dateRenderer('Y年m月d日')}
        ]);
        cm.defaultSortable = true;
        var fields =
            [
                {name:"ID"},
                {name:"TypeCName"},
                {name:"TypeEName"},
                {name:"DelFlag"},
                {name:"AddDate"}
           ];
        var store = new Ext.data.Store
        ({
            proxy:new Ext.data.HttpProxy({url:url}),
            reader:new Ext.data.JsonReader({totalProperty:"totalPorperty",root:"root",fields:fields})
        });
        store.load({params:{start:0,limit:12}});        
        var pagingBar = new Ext.PagingToolbar
        ({
            displayInfo:true,
            emptyMsg:"没有数据显示",
            displayMsg:"显示从{0}条数据到{1}条数据,共{2}条数据",
            store:store,
            pageSize:12
        });
        var grid = new Ext.grid.GridPanel
        ({
            id:"MenuGridPanel",
            renderTo:document.body,
            layout:"fit",
            frame:true,
            border:true,
            width:600,
            height:360,
            autoScroll:true, 
            store:store,
            sm:sm,
            cm:cm,
            viewConfig:{forceFit: true},
            title:'<img style="height:auto; width:auto;" src="images/first.gif" /> Ext2.2全新功能版系列之--右键菜单',
            bbar:pagingBar
        });
        grid.on("rowcontextmenu",function(grid,rowIndex,e)
        {
            e.preventDefault();if(rowIndex<0){return;}
            var treeMenu = new Ext.menu.Menu
            ([
                {xtype:"button",text:"添加",icon:"Images/Icons/button/add.gif",pressed:true,handler:function(){}},
                {xtype:"button",text:"编辑",icon:"Images/Icons/button/delete.gif",pressed:true,handler:function(){}},
                {xtype:"button",text:"隐藏",icon:"Images/Icons/arrow-down.gif",pressed:true,handler:function(){}},
                {xtype:"button",text:"显示",icon:"Images/Icons/arrow-up.gif",pressed:true,handler:function(){}},
                {xtype:"button",text:"删除",icon:"Images/Icons/button/cross.gif",pressed:true, handler:function(){}},              
                {xtype:"button",text:"上传图片",icon:"Images/Icons/plugin_add.gif",pressed:true,handler:function(){}}
            ]);
            treeMenu.showAt(e.getPoint());
        });
    }
    </script>   
    <script type="text/javascript">
    Ext.onReady(ready);
    </script>
    </div>
    </form>
</body>
</html>

Tag标签: grid
posted @ 2008-10-31 13:35 殷良胜 阅读(1254) 评论(16)  编辑 收藏 网摘

  回复  引用  查看    
#1楼[楼主]2008-11-03 12:38 | 殷良胜      
  回复  引用    
#2楼2008-12-21 12:22 | 刘唤[未注册用户]
一直不知道右键时的小图标怎么绑定的,
太感谢楼主了

  回复  引用    
#3楼2008-12-21 12:23 | 刘唤[未注册用户]
我赞
  回复  引用  查看    
#4楼[楼主]2008-12-22 11:32 | 殷良胜      
@刘唤
谢谢支持

  回复  引用    
#5楼2008-12-23 10:15 | taorui[未注册用户]
博主这个例子中把MENU放在rowcontextmenu事件里定义的做法不可取,这样每点一次右键都会生成一次MENU对象,很占内存的,建议把MENU的实例化放到rowcontextmenu事件外面.
  回复  引用  查看    
#6楼[楼主]2008-12-23 11:55 | 殷良胜      
@taorui
呵呵,有理!

  回复  引用    
#7楼2009-02-04 15:39 | 123123[未注册用户]
问一下楼主,要是实例化在rowcontextmenu事件外面的话,点右键新打开窗口,要传关键字怎么办
  回复  引用    
#8楼2009-02-04 15:43 | 123123[未注册用户]
因为先生成了menu,在按钮上写了handler:function(...){},而里面的参数是grid.on()var record = grid.getStore().getAt(rowIndex);产生的,怎么解决矛盾

  回复  引用  查看    
#9楼[楼主]2009-02-04 17:31 | 殷良胜      
@123123
要传关键字吗?
可以直接向下传即可
比如上例
grid.on("rowcontextmenu",function(grid,rowIndex,e)
{
e.preventDefault();if(rowIndex<0){return;}
var treeMenu = new Ext.menu.Menu
([
{xtype:"button",text:"添加",icon:"Images/Icons/button/add.gif",pressed:true,handler:function(){}},
{xtype:"button",text:"编辑",icon:"Images/Icons/button/delete.gif",pressed:true,handler:function(){}},
{xtype:"button",text:"隐藏",icon:"Images/Icons/arrow-down.gif",pressed:true,handler:function(){}},
{xtype:"button",text:"显示",icon:"Images/Icons/arrow-up.gif",pressed:true,handler:function(){}},
{xtype:"button",text:"删除",icon:"Images/Icons/button/cross.gif",pressed:true, handler:function(){}},
{xtype:"button",text:"上传图片",icon:"Images/Icons/plugin_add.gif",pressed:true,handler:function(){}}
]);
treeMenu.showAt(e.getPoint());
});
要传关键字,只要写成这样即可
grid.on("rowcontextmenu",function(grid,rowIndex,e)
{
e.preventDefault();if(rowIndex<0){return;}
var treeMenu = new Ext.menu.Menu
([
{xtype:"button",text:"添加",icon:"Images/Icons/button/add.gif",pressed:true,handler:function(grid,rowIndex){}},
{xtype:"button",text:"编辑",icon:"Images/Icons/button/delete.gif",pressed:true,handler:function(grid,rowIndex){}},
{xtype:"button",text:"隐藏",icon:"Images/Icons/arrow-down.gif",pressed:true,handler:function(grid,rowIndex){}},
{xtype:"button",text:"显示",icon:"Images/Icons/arrow-up.gif",pressed:true,handler:function(grid,rowIndex){}},
{xtype:"button",text:"删除",icon:"Images/Icons/button/cross.gif",pressed:true, handler:function(grid,rowIndex){}},
{xtype:"button",text:"上传图片",icon:"Images/Icons/plugin_add.gif",pressed:true,handler:function(grid,rowIndex){}}
]);
treeMenu.showAt(e.getPoint());
});
或者也可通过grid,rowIndex这两个关键字
获取具体的要传的数据放在handler:function(“要传的数据”){}即可
可以先尝试下
明天我会抽空尽量上传一个具体的完整的示例提供下载

  回复  引用    
#10楼2009-02-05 08:58 | 123123[未注册用户]
谢谢楼主,提供一个思路,我的问题解决了,看到5楼的建议,我把menu实例化放在grid外面了,然后在grid.on()里面动态通过监听添加menu按钮的事件。这样子每次点击行后,右键菜单中按钮的事件添加完,就可以执行了
  回复  引用  查看    
#11楼[楼主]2009-02-05 09:06 | 殷良胜      
@123123
呵呵 解决就好

  回复  引用    
#12楼2009-02-05 09:35 | 123123[未注册用户]
楼主我碰到个棘手的问题,grid能正常显示数据,能正常分页,共78页,但是我点到第3页,就不会变数据了,也就是说第3页数据没有正常显示。经过测试发现3-9,19,22,60-63,翻到这些页码都不正常显示数据, start:0,limit:30,我直接拿start:60测试,理论上显示的是第3页的,结果是空白表格这是为什么啊
  回复  引用    
#13楼2009-02-05 10:08 | 123123[未注册用户]
上述问题找到原因了,数据库里的有个字段,内容是“ a"b"c ”,结果生成{"data":[{"id":"1","pname":" a"b"c "}] },请问怎么解决
  回复  引用  查看    
#14楼[楼主]2009-02-05 10:09 | 殷良胜      
@123123
能否将你的源代码张贴出来呢?
空想是要花很多时间的!
你说呢?

  回复  引用  查看    
#15楼[楼主]2009-02-05 10:10 | 殷良胜      
@123123
你的问题很有意思

  回复  引用  查看    
#16楼[楼主]2009-02-05 10:11 | 殷良胜      
--引用--------------------------------------------------
123123: 上述问题找到原因了,数据库里的有个字段,内容是“ a&quot;b&quot;c ”,结果生成{&quot;data&quot;:[{&quot;id&quot;:&quot;1&quot;,&quot;pname&quot;:&quot; a&quot;b&quot;c &quot;}] },请问怎么解决
--------------------------------------------------------
自己好好想想怎么替换里面的双引号吧

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1323634




相关文章:

相关链接: