<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    悟心

    成功不是將來才有的,而是從決定去做的那一刻起,持續(xù)累積而成。 上人生的旅途罷。前途很遠,也很暗。然而不要怕。不怕的人的面前才有路。

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      93 隨筆 :: 1 文章 :: 103 評論 :: 0 Trackbacks
    function rowdblclickFn(grid, rowIndex, e){//雙擊事件

                 var row = grid.store.getById(grid.store.data.items[rowIndex].id);
                 alert(row.get("unitcode"));
            }


    grid.addListener('rowdblclick', rowdblclickFn);


    Ext2.0是一個javascript框架,它的Grid控件和其它可以顯示數(shù)據(jù)的控件,能夠支持多種數(shù)據(jù)類型,如二維數(shù)組、Json數(shù)據(jù)和XML數(shù)據(jù),甚至包括我們自定義的數(shù)據(jù)類型。Ext為我們提供了一個橋梁Ext.data.Store,通過它我們可以把任何格式的數(shù)據(jù)轉(zhuǎn)化成grid可以使用的形式,這樣就不需要為每種數(shù)據(jù)格式寫一個grid的實現(xiàn)了。

    首先,一個表格應(yīng)該有列定義,即定義表頭ColumnModel:
    // 定義一個ColumnModel,表頭中有四列
    var cm = new Ext.grid.ColumnModel([
         {header:'編號',dataIndex:'id'},
         {header:'性別',dataIndex:'sex'},
         {header:'名稱',dataIndex:'name'},
         {header:'描述',dataIndex:'descn'}
    ]);
    cm.defaultSortable = true;
        該ColumnModel定義了表格的四個列,其每列的名稱和對應(yīng)的數(shù)據(jù)鍵。請注意defaultSortable屬性,即為每個列都安上一個可以排序的功能。如果只想某些列舉有該功能,可以設(shè)置:
    {header:'編號',dataIndex:'id',Sortable:true},

    現(xiàn)在就來看看這個Ext.data.Store是如何轉(zhuǎn)換三種數(shù)據(jù)的。

    1.二維數(shù)組:
    // ArrayData
    var data = [
         ['1','male','name1','descn1'],
         ['2','male','name1','descn2'],
         ['3','male','name3','descn3'],
         ['4','male','name4','descn4'],
         ['5','male','name5','descn5']
    ];
    // ArrayReader
    var ds = new Ext.data.Store({
         proxy: new Ext.data.MemoryProxy(data),
         reader: new Ext.data.ArrayReader({}, [
            {name: 'id',mapping: 0},
             {name: 'sex',mapping: 1},
             {name: 'name',mapping: 2},
             {name: 'descn',mapping: 3}
         ])
    });
    ds.load();
    ds要對應(yīng)兩個部分:proxy和reader。proxy告訴我們從哪里獲得數(shù)據(jù),reader告訴我們?nèi)绾谓馕鲞@個數(shù)據(jù)。
    現(xiàn)在用的是Ext.data.MemoryProxy,它將內(nèi)存中的數(shù)據(jù)data作為參數(shù)傳遞。Ext.data.ArrayReader專門用來解析數(shù)組,并且告訴我們它會按照定義的規(guī)范進行解析,每行按順序讀取四個數(shù)據(jù),第一個叫id,第二個叫sex,第三個叫name,第四個descn。這些是跟 cm定義中的dataIndex對應(yīng)的。這樣cm就知道哪列應(yīng)該顯示那條數(shù)據(jù)了。
    mapping屬性用于標記data中的讀取后的數(shù)據(jù)與標頭的映射關(guān)系,一般是不用設(shè)置的。但如果我們想讓sex的數(shù)據(jù)中name欄中出現(xiàn),可以設(shè)置mapping值。即id的mapping為2,后者為0。
    記得要執(zhí)行一次ds.load(),對數(shù)據(jù)進行初始化。


    數(shù)據(jù)的顯示顯得非常簡單:
    HTML文件:
    <div id='grid'></div>
    JS文件:
    var grid = new Ext.grid.GridPanel({
         el: 'grid',
         ds: ds,
         cm: cm
    });
    grid.render();

    其顯示結(jié)果為:

     

    2.如何在表格中添加CheckBox呢?

    var sm = new Ext.grid.CheckboxSelectionModel();
    var cm = new Ext.grid.ColumnModel([
        new Ext.grid.RowNumberer(),//自動行號
        sm,//添加的地方
        {header:'編號',dataIndex:'id'},
        {header:'性別',dataIndex:'sex'},
        {header:'名稱',dataIndex:'name'},
        {header:'描述',dataIndex:'descn'}
    ]);

    var grid = new Ext.grid.GridPanel({
        el: 'grid3',
        ds: ds,
        cm: cm,
        sm: sm,//添加的地方
        title: 'HelloWorld'
    });

     

    3. 如何做Grid上觸發(fā)事件呢?
    下面是一個cellclick事件
    grid.addListener('cellclick', cellclick);
    function cellclick(grid, rowIndex, columnIndex, e) {
        var record = grid.getStore().getAt(rowIndex);   //Get the Record
        var fieldName = grid.getColumnModel().getDataIndex(columnIndex); //Get field name
        var data = record.get(fieldName);
        Ext.MessageBox.alert('show','當前選中的數(shù)據(jù)是'+data);
    }

    4.如何做Grid中做出快捷菜單效果:
    grid.addListener('rowcontextmenu', rightClickFn);//右鍵菜單代碼關(guān)鍵部分
    var rightClick = new Ext.menu.Menu({
        id:'rightClickCont', //在HTML文件中必須有個rightClickCont的DIV元素
        items: [
            {
                id: 'rMenu1',
                handler: rMenu1Fn,//點擊后觸發(fā)的事件
                text: '右鍵菜單1'
            },
            {
                //id: 'rMenu2',
                //handler: rMenu2Fn,
                text: '右鍵菜單2'
            }
        ]
    });
    function rightClickFn(grid,rowindex,e){
        e.preventDefault();
        rightClick.showAt(e.getXY());
    }
    function rMenu1Fn(){
       Ext.MessageBox.alert('right','rightClick');
    }
    其Grid如下:

    5.如何將一列中的數(shù)據(jù)根據(jù)要求進行改變呢?
    比如說性別字段根據(jù)其male或female改變顯示的顏色,這種ColumnMode中設(shè)計:
    var cm = new Ext.grid.ColumnModel([
        new Ext.grid.RowNumberer(),
        sm,
        {header:'編號',dataIndex:'id'},
        {header:'性別',dataIndex:'sex',renderer:changeSex},
        {header:'名稱',dataIndex:'name'},
        {header:'描述',dataIndex:'descn'}
    ]);
    cm.defaultSortable = true;

    function changeSex(value){
        if (value == 'male') {
            return "<span style='color:red;font-weight:bold;'>紅男</span>";
        } else {
            return "<span style='color:green;font-weight:bold;'>綠女</span>";
        }
    }

    其它兩種數(shù)據(jù)的Grid顯示是相同的,其不同之處在于數(shù)據(jù)獲取的過程:
    6.Json數(shù)據(jù)
    至于這種數(shù)據(jù)的類型請大家自己看Ajax的書籍:
    //JsonData
    var data = {
        'coders': [
            { 'id': '1', 'sex': 'male', 'name':'McLaughlin', 'descn': 'brett@newInstance.com' },
            { 'id': '2', 'sex': 'male','name':'Hunter', 'descn': 'jason@servlets.com' },
            { 'id': '3', 'sex': 'female','name':'Harold', 'descn': 'elharo@macfaq.com' },
            { 'id': '4', 'sex': 'male','name':'Harolds', 'descn': 'elhaross@macfaq.com' }
        ],
        'musicians': [
            { 'id': '1', 'name': 'Clapton', 'descn': 'guitar' },
            { 'id': '2', 'name': 'Rachmaninoff', 'descn': 'piano' }
        ]
    }
    //ds使用的MemoryProxy對象和JsonReader對象
    var ds = new Ext.data.Store({
            proxy: new Ext.data.MemoryProxy(data),
            reader: new Ext.data.JsonReader({root: 'coders'}, [
                {name: 'id'},
                {name: 'sex'},
                {name: 'name'},
                {name: 'descn'}
            ])
        });
    ds.load();

    var grid = new Ext.grid.GridPanel({
        el: 'grid3',
        ds: ds,
        cm: cm,
        sm: sm,
        title: 'HelloWorld',
        autoHeight: true//一定要寫,否則顯示的數(shù)據(jù)會少一行
    });
    grid.render();

    7.使用XML數(shù)據(jù):
    注意,讀取XML數(shù)據(jù)必須在服務(wù)器上進行。
    XML數(shù)據(jù)test.xml的內(nèi)容:
    <?xml version="1.0" encoding="UTF-8"?>
    <dataset>
         <results>2</results>
         <item>
               <id>1</id>
               <sex>male</sex>
               <name>Taylor</name>
               <descn>Coder</descn>
         </item>
    </dataset>var ds3 = new Ext.data.Store({
        url: 'test.xml',   //XML數(shù)據(jù)
        reader: new Ext.data.XmlReader({record: 'item'}, [ //使用XmlReader對象
            {name: 'id'},
            {name: 'sex'},
            {name: 'name'},
            {name: 'descn'}
        ])
    });

    8.從服務(wù)器獲取數(shù)據(jù)和數(shù)據(jù)翻頁控件
    從一個服務(wù)器文件,如ASP、JSP或Servlet中獲得數(shù)據(jù)二維Array、JSON或XML數(shù)據(jù),也可以被Ext讀取,并被Grid顯示:
    服務(wù)器文件data.asp:
    <%
        start = cint(request("start"))
        limit = cint(request("limit"))

        dim json
        json=cstr("{totalProperty:100,root:[")
       
        for i = start to limit + start-1
            json =json + cstr("{'id':'") +cstr(i) + cstr("','name':'name") + cstr(i) + cstr("','descn':'descn") + cstr(i) + cstr("'}")
            if i <> limit + start - 1 then
                json =json + ","
            end if
        next
        json = json +"]}"
        response.write(json)
    %>

    我們可以看到,這個頁面會根據(jù)傳入的start和limit的不同,返回不同的數(shù)據(jù),其實質(zhì)是個分頁的代碼。下面是start=0,limit=10的JSON數(shù)據(jù):
    {totalProperty:100,root:[{'id':'0','name':'name0','descn':'descn0'},{'id':'1','name':'name1','descn':'descn1'},{'id':'2','name':'name2','descn':'descn2'},{'id':'3','name':'name3','descn':'descn3'},{'id':'4','name':'name4','descn':'descn4'},{'id':'5','name':'name5','descn':'descn5'},{'id':'6','name':'name6','descn':'descn6'},{'id':'7','name':'name7','descn':'descn7'},{'id':'8','name':'name8','descn':'descn8'},{'id':'9','name':'name9','descn':'descn9'}]}

    我們使用分頁控件來控制Grid的數(shù)據(jù):
    Ext.onReady(function(){
        var sm = new Ext.grid.CheckboxSelectionModel();
       
        var cm = new Ext.grid.ColumnModel([
            new Ext.grid.RowNumberer(),
            sm,
            {header:'編號',dataIndex:'id'},
            {header:'性別',dataIndex:'sex'},
            {header:'名稱',dataIndex:'name'},
            {header:'描述',dataIndex:'descn'}
        ]);
        cm.defaultSortable = true;

        var ds = new Ext.data.Store({
            proxy: new Ext.data.HttpProxy({url:'data.asp'}),
            reader: new Ext.data.JsonReader({
                totalProperty: 'totalProperty',
                root: 'root'
            }, [
                {name: 'id'},
                {name: 'name'},
                {name: 'descn'}
            ])
        });
        ds.load({params:{start:0,limit:10}});
       
        var grid = new Ext.grid.GridPanel({
            el: 'grid3',
            ds: ds,
            cm: cm,
            sm: sm,
            title: 'ASP->JSON',
            bbar: new Ext.PagingToolbar({
                pageSize: 10,
                store: ds,
                displayInfo: true,
                displayMsg: '顯示第 {0} 條到 {1} 條記錄,一共 {2} 條',
                emptyMsg: "沒有記錄"
            }),
            tbar: new Ext.PagingToolbar({
                pageSize: 10,
                store: ds,
                displayInfo: true,
                displayMsg: '顯示第 {0} 條到 {1} 條記錄,一共 {2} 條',
                emptyMsg: "沒有記錄"
            })
        });
        grid.render();
    })

     

    10.如何在Grid的上方添加按鈕呢?
    添加按鈕的關(guān)鍵之處在于tbar或bbar屬性設(shè)置Toolbar工具條:
    var grid = new Ext.grid.GridPanel({
        el: 'grid3',
        ds: ds,
        cm: cm,
        sm: sm,
        title: 'HelloWorld',
        tbar: new Ext.Toolbar({
            items:[
                    {
                        id:'buttonA'
                        ,text:"Button A"
                        ,handler: function(){ alert("You clicked Button A"); }
                    }
                    ,
                    new Ext.Toolbar.SplitButton({})
                    ,{
                        id:'buttonB'
                        ,text:"Button B"
                        ,handler: function(){ alert("You clicked Button B"); }
                    }
                    ,
                    '-'
                    ,{
                        id:'buttonc'
                        ,text:"Button c"
                    }
                ]
            })
    });

     

    11.將GridPanel放入一個Panel或TabPanel中
    var tabs = new Ext.TabPanel({
        collapsible: true
        ,renderTo: 'product-exceptions'
        ,width: 450
        ,height:400
        ,activeTab: 0
        ,items:[
            {
                title: 'Unmatched'
            },{
                title: 'Matched'
            }
        ]
    });
    tabs.doLayout();

    var panel = new Ext.Panel({
        renderTo: 'panel',
        title:'panel',
        collapsible:true,
        width:450,
        height:400,
        items:[grid] //管理grid
    });

    Panel必須有DIV存在。其包含的Component有items管理。

     

    本文是在學習Ext2.0的基礎(chǔ)上寫的,因此,參考了許多網(wǎng)上存在的Blog文章。在此表示致敬!

     

    本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/boy00fly/archive/2009/03/20/4008317.aspx

    posted on 2010-01-20 19:49 艾波 閱讀(15753) 評論(7)  編輯  收藏 所屬分類: Extjs

    評論

    # re: Extjs.grid 詳解 2011-05-23 13:52 謝謝
    哥們謝謝  回復(fù)  更多評論
      

    # re: Extjs.grid 詳解 2011-06-21 14:47 523756055
    非常詳細 謝謝  回復(fù)  更多評論
      

    # re: Extjs.grid 詳解 2011-06-28 17:44 hhhhhhh
    hhh  回復(fù)  更多評論
      

    # re: Extjs.grid 詳解[未登錄] 2011-06-30 17:57
    我   回復(fù)  更多評論
      

    # re: Extjs.grid 詳解 2011-11-18 14:35 eeee
    謝謝!

      回復(fù)  更多評論
      

    # re: Extjs.grid 詳解 2012-03-06 14:31 大概豆腐干后
    天月  回復(fù)  更多評論
      

    # re: Extjs.grid 詳解 2012-05-25 16:01 freedom_home
    雖樓什。但覺厲?。?!謝謝  回復(fù)  更多評論
      

    主站蜘蛛池模板: 国内免费高清在线观看| 57pao一国产成永久免费| 日韩在线视频免费看| 国产成+人+综合+亚洲专| 3d成人免费动漫在线观看| 久久久亚洲AV波多野结衣| 67pao强力打造高清免费| 久久久久亚洲Av片无码v| 久久亚洲精品无码AV红樱桃| 黄视频在线观看免费| 国产亚洲精久久久久久无码AV| 欧亚一级毛片免费看| 伊人久久大香线蕉亚洲| 你懂的网址免费国产| 色播亚洲视频在线观看| 久久久久久精品成人免费图片| 亚洲人成网站日本片| 日韩高清在线高清免费| 免费无码国产V片在线观看| 亚洲一区二区三区免费| 精品国产污污免费网站| 亚洲视频国产视频| 青苹果乐园免费高清在线| 羞羞漫画在线成人漫画阅读免费| 亚洲成a人片在线观看日本麻豆 | 无码乱肉视频免费大全合集| tom影院亚洲国产一区二区| 毛片a级毛片免费观看品善网| 毛片亚洲AV无码精品国产午夜| 亚洲一级片免费看| 4虎1515hh永久免费| 亚洲AV日韩AV永久无码色欲| 亚洲中文久久精品无码| 亚洲成人在线免费观看| 18禁亚洲深夜福利人口| 亚洲成a人片77777kkkk| 韩国18福利视频免费观看| 免费无码又爽又刺激网站直播| 色老板亚洲视频免在线观| 国产综合精品久久亚洲| 99久久99这里只有免费费精品|