【原】提高篇:第二十二篇,ext2.2打造全新功能grid系列--选择数据篇

 这篇实现的功能是:当选择grid列表的某行数据时,在列表的右边则会动态的显示该条数据的详细信息.

先看看效果图:

 

上面的效果图展示了当选择左边列表的某行数据时,在右边就会动态的显示该条数据的详细信息

当我们选择某行数据后就会出现下图所示的效果: 

上边的效果图显示了这个功能的实现.

下面将页面实现代码完整张贴出来:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="gridScroll.aspx.cs" Inherits="gridScroll" %>

<!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>Ext2.2全新功能版系列之--显示详细内容</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_icon { background-image:url(images/first.gif)}
    .center_icon { background-image:url(images/house.png)}
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <script type="text/javascript">
    function ready()
    {       
        //添加下面这句,有助于当鼠标放在Ext自带的图标上时能够显示提示的功能
        Ext.QuickTips.init();
       
        var url = "jsonGrid3.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; 128
        var fields =
            [
                {name:"ID"},
                {name:"TypeCName"},
                {name:"TypeEName"},
                {name:"Message"},
                {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:15}});
       
        var pagingBar = new Ext.PagingToolbar
        ({
            displayInfo:true,
            emptyMsg:"没有数据显示",
            displayMsg:"显示从{0}条数据到{1}条数据,共{2}条数据",
            store:store,
            pageSize:15
        });
        var grid = new Ext.grid.GridPanel
        ({
            id:"MenuGridPanel",region:"center",
            store:store,           
            cm:cm,
            sm:sm,
            renderTo:document.body,
            layout:"fit",
            frame:true,
            border:true,
            width:700,
            autoWidth:true,
            height:450,
            autoScroll:true, 
            viewConfig:{forceFit: true},
            title:'<img style="height:auto; width:auto;" src="images/first.gif" /> Ext2.2全新功能版系列之--显示详细内容',
            bbar:pagingBar
        });
        //这个窗体用于展示某行数据的详细信息
        var formPanel = new Ext.Panel
        ({
             title:"浏览记录",
             region:"east",
             width:357,
             height:160,
             layout:'fit',
             split:true,
             resizable:false,
             iconCls :"center_icon",
             items:
             [
                 {
                    xtype:"form",
                    height:200,
                    labelPad : 0,// 标签与字段录入框之间的空白
                    bodyStyle : 'padding-top:3px',
                    frame : true,
                    defaultType : 'textfield',
                    labelAlign : 'right',
                    labelWidth : 55,
                    defaults : // 容器中组件默认统一配置选项
                    {
                        allowBlank : false,width : 250// 字段宽度                           
                    },
                    items :
                    [
                         {fieldLabel:"标题",id:"TypeCName",style:"color:red;",readOnly:true},
                         {fieldLabel:"英文名称",id:"TypeEName",style:"color:green;",readOnly:true},
                         {xtype:"textarea",fieldLabel:"内容",id:"Message",style:"color:blue;",height:160,readOnly:true},
                         {xtype:"datefield",fieldLabel:"添加日期",id:"AddDate",renderer:Ext.util.Format.dateRenderer('Y年m月d日'),readOnly:true},
                         {fieldLabel:"状态",id:"DelFlag",maxLength:5,readOnly:true}
                    ]
                 }
             ]
        });
        grid.on("rowclick",function(thisGrid,rowIndex,e)
        {
            var row = thisGrid.getStore().getAt(rowIndex).data;           
            Ext.getCmp("TypeCName").setValue(row.TypeCName);
            Ext.getCmp("TypeEName").setValue(row.TypeEName);
            if(row.Message.indexOf("<br/>")>-1)
            {
                var newMessage1 = row.Message.replace(/\s/img,"");
                var newMessage2 = newMessage1.replace(/\<br\/\>/img,"\r\n");                
                Ext.getCmp("Message").setValue(newMessage2);
            }            
            Ext.getCmp("AddDate").setValue(row.AddDate);
            Ext.getCmp("DelFlag").setValue(row.DelFlag);              
        });                
        var viewPort = new Ext.Viewport
        ({
             title:"grid与form搭配活用",
             layout:'border',
             id:"viewPort",           
             items:
             [
                grid,formPanel
             ]
        });
    }
    </script>
  
    <script type="text/javascript">
    Ext.onReady(ready);
    </script>
    </div>
    </form>
</body>
</html>

这个示例的后台代码没有张贴出来,是因为这个系列的后台代码完全一样,唯一的不同在于数据表加了一个message字段,用于存储内容

下面再看看效果图:

 

Tag标签: grid
posted @ 2008-10-29 15:14 殷良胜 阅读(1831) 评论(18)  编辑 收藏 网摘

  回复  引用  查看    
#1楼[楼主]2008-10-30 13:01 | 殷良胜      
  回复  引用  查看    
#2楼2008-11-19 11:24 | 尘封的陀螺      
楼主你这个例子选择左边的grid里面的一条数据显示到个右边Panel里面是通一条数据,有没有选择左边的grid里面的一条数据在右边的panel里面显示成一个grid呢,通过左边选择的一条数据传个id值,后台通过id值查询出另一组数据将他显示到右边,只在右边的panel里面刷新页面 左边的不刷新。有没有什么方法啊 ,请楼主帮帮忙!

  回复  引用  查看    
#3楼2008-11-24 11:34 | 尘封的陀螺      
期待楼主帮我找个解决的办法啊,我在网上也没有找到相关的例子。
  回复  引用  查看    
#4楼[楼主]2008-11-24 12:44 | 殷良胜      
@尘封的陀螺
呵呵
老弟呀
这不是一样的吗?
将右面的设置成GridPanel,然后在从后台取数据就可以的。
自己想想吧。
是不是很容易实现。
所以,
开始我就说:自己一定要先思考下。思考的东西是自己的哦。 如果还是没有想到解决的办法 我有空的时候给你写个例子吧

  回复  引用  查看    
#5楼2008-11-24 14:14 | 尘封的陀螺      
恩 我是这样做的但是传不了值。
var gridForm = new Ext.FormPanel({
id: 'company-form',
frame: true,
bodyStyle:'padding:0px',
width: 1024,

layout: 'column', // Specifies that the items will now be arranged in columns

items: [grid,
{
xtype:'tabpanel',
plain:true,
activeTab: 0,
height:500,
defaults:{bodyStyle:'padding:10px'},
items:[
{
collapsible : true,// 是否可以展开
labelWidth: 70,
layout:'form',
title:'详细信息',
autoHeight: true,
autoWidth: true,
defaultType: 'textfield',
defaults: {width: 400},

border: false,
items: [


{fieldLabel: '简称',name: 'vendorNo'},
{fieldLabel: '全称',name: 'vendorName'},
{fieldLabel: '分类',name: 'vendorType'},
{fieldLabel: '级别',name: 'vendorClass'},
{fieldLabel: '公司地址',name: 'address'},
{fieldLabel: '电话1',name: 'tel1'},
{fieldLabel: '电话2',name: 'tel2'},
{fieldLabel: '传真',name: 'fax'},
{fieldLabel: '结款方式',name: 'paymentMode'},
{fieldLabel: '运货方式',name: 'deliveryMode'},
{fieldLabel: '发票方式',name: 'invoiceMode'},
{fieldLabel: '户名',name: 'bankTitle'},
{fieldLabel: '开户行',name: 'bankName'},
{fieldLabel: '账号',name: 'bankNo'},
{fieldLabel: '认可产品',name: 'certProduct'}
]

},{
title:'联系人列表',
layout:'form',
defaults: {width: 1020},
bodyStyle: Ext.isIE ? 'padding:0 0 0 0;' : 'padding:0 0;',

items:[
{
autoLoad :{ url: 'product/provider/querycontactlistTerms.action',scripts:true,nocache: true}
}
]
},{
title:'报价列表',
layout:'form',
defaults: {width: 1020},
bodyStyle: Ext.isIE ? 'padding:0 0 0 0;' : 'padding:0 0;',

items:[
{
autoLoad :{ url: 'product/provider/querycontactlistTerms.action',scripts:true,nocache: true}
}
]
},{
title:'成交记录',
layout:'form',
defaults: {width: 1020},
bodyStyle: Ext.isIE ? 'padding:0 0 0 0;' : 'padding:0 0;',

items:[
{
autoLoad :{ url: 'product/provider/querycontactlistTerms.action',scripts:true,nocache: true}
}
]
}]
}

],
renderTo: bd
});
对了这里好像传不了图片啊 我想截个图的

  回复  引用  查看    
#6楼[楼主]2008-11-26 16:30 | 殷良胜      
@尘封的陀螺
已经根据你的需求我写了一个例子
希望能够给你帮助
提高篇:第三十二篇,ext2.2打造全新功能grid系列--Grid复用篇

  回复  引用  查看    
#7楼2008-11-28 14:47 | 尘封的陀螺      
谢谢 楼主 我看到了 正在研究中。
  回复  引用    
#8楼2008-12-14 15:13 | gpx2046[未注册用户]
楼主我想做成双击标题弹出一个修改窗口的形式,在窗口中修改信息然后保存,请指点一下做法。
  回复  引用  查看    
#9楼[楼主]2008-12-15 09:15 | 殷良胜      
@gpx2046
【需要两步】
第一:
将【grid.on("rowclick",function(thisGrid,rowIndex,e)】修改为
【grid.on("dblclick",function(thisGrid,rowIndex,e)】
第二:
在【var grid = new Ext.grid.GridPanel ({}); 】里面添加属性
【clicksToEdit:2】
1表示单击
2表示双击


  回复  引用    
#10楼2008-12-25 16:45 | 乡下人[未注册用户]
我想用那个 checkbox 选中几个 然后删除 或全选后删除 怎么实现啊 希望楼主能办我忙 给点建议 和小例子 谢谢
  回复  引用  查看    
#11楼[楼主]2008-12-25 18:02 | 殷良胜      
最近为没有爱伤透了身体
打不起精神
很抱歉哦,你自己搞吧

  回复  引用    
#12楼2008-12-25 21:26 | esse[未注册用户]
你要快点振作起来哟,我们有很多人都需要的你的帮助哦!顺便祝你节日快乐,新年快乐,天天快乐哈!
  回复  引用  查看    
#13楼[楼主]2008-12-26 11:13 | 殷良胜      
@esse
谢谢了
现在好多了,但还是没有精神,不能够按时吃饭和睡觉,唉,好麻烦,每逢佳节倍感孤单

  回复  引用    
#14楼2009-02-04 08:27 | hank88[未注册用户]
晕。。。为爱所伤了?
  回复  引用  查看    
#15楼[楼主]2009-02-04 09:04 | 殷良胜      
@hank88
呵呵
现在我感到了世界的存在

  回复  引用    
#16楼2009-02-12 20:20 | sheath[未注册用户]
发生了什么事情令你重新感到世界存在了?
  回复  引用  查看    
#17楼[楼主]2009-02-17 11:01 | 殷良胜      
@sheath
哈哈哈哈
你觉得什么事情会让你感受到世界的不一样呢

  回复  引用    
#18楼2009-03-08 11:55 | Levi[未注册用户]
你好!请问一下怎么样才能局部实时自动刷新Grid数据,不用按钮类型的?谢谢!
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

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

0 1322152




相关文章:

相关链接: