天天看點

ExtJs 備忘錄(6)—— GirdPanl表格(二) [ 搜尋分頁 ]

前言

  近些天對于厚積薄發有深刻的了解,尤其是月末那兩天,很想再寫兩篇文章,保持每周一篇——每月至少四篇以上的文章。寫文章分兩種情況:一種情況是已經積累了許多經驗,寫起來輕松且得心應手,内容和系列文章容易把握,最典型的就是視訊監控的那系列文章,得以寫完是因為已經從事近半年相關的開發工作;另一種情況則是有方向但積累不足甚至無積累,邊學邊實踐,然後進行歸類和總結成系列,比如視訊監控第二個系列和本系列都屬于這種情況,如果時間稍微充足且過程較為順利,尚可勉強完成,反之則遙遙無期。由此感悟,下次寫系列文章還是得先多多積累,至少系列文章的内容在腹中已有一半以上,方可開動,否則可考慮繼續積累或者拆除幾篇相對獨立的文章單獨寫,不必冠以系列,我可不想蓋爛尾樓啊!

系列

推薦

正文

  一、效果圖

ExtJs 備忘錄(6)—— GirdPanl表格(二) [ 搜尋分頁 ]

  二、代碼實作

    2.1  用戶端

      tablepage.aspx

ExtJs 備忘錄(6)—— GirdPanl表格(二) [ 搜尋分頁 ]
ExtJs 備忘錄(6)—— GirdPanl表格(二) [ 搜尋分頁 ]

代碼

        ext.onready(function() {

            ext.quicktips.init();

            ext.form.field.prototype.msgtarget = 'side';

            //搜尋id

            var id = new numberfield('tbsearch');

            id.style='text-align:center';//設定文本居中

            var store = new ext.data.store({

                proxy: new ext.data.httpproxy({

                    url: 'tablepage.aspx?method=search',

                    method: 'get'

                }),

                reader: new ext.data.jsonreader({

                    totalproperty: 'count',

                    root: 'result'

                }, [

                        { name: 'name' },

                        { name: 'id' },

                        { name: 'email' },

                        { name: 'gender' }

                ]),

                baseparams:{    

                    id : '',        //用于分頁時儲存搜尋條件

                    limit: 10       //每頁顯示數量

                }

            });

            //加載資料

            store.load();

            //周遊資料

//            store.each(function(record) {   

//                alert(record.get('name'));   

//            }); 

//            for (var i = 0; i < store.getcount(); i++) {   

//                var record = store.getat(i);   

//            }  

            var datacolumns = new ext.grid.columnmodel({

                columns: [

                    new ext.grid.rownumberer(), //顯示行号

                    { header: "編  号", dataindex: 'id', sortable: true },

                    { header: "名  稱", dataindex: 'name' },

                    { header: "郵  箱", dataindex: 'email' },

                    { header: "性  别", dataindex: 'gender' }

                ],

                defaults: {

                    align: 'center'

            var grid = new ext.grid.gridpanel({

                store: store,

                cm: datacolumns,    //columns: [{}]

                renderto: ext.getbody(),

                //autoexpandcolumn: 1,

                title: '<center style="curor:hand" onclick="window.location.reload();">搜尋與分頁</center>',

                autoscroll: true,

                autoheight: true,

                border: true,

                disableselection: true,

                enablehdmenu:false,

                frame: true,

                loadmask: { msg: '正在加載資料,請稍侯……' },     //loadmask: true,

                striperows: true, //隔行顯示不同顔色

//                bodystyle:'width:99.8%',

//                autowidth:true,

                width: 800,

                //設定單行選中模式

                selmodel: new ext.grid.rowselectionmodel({ singleselect: false }),

                //使列自動均分

                viewconfig: {

                    forcefit: true

                },

                //搜尋條

                tbar: new ext.toolbar({

                    items:[

                        new ext.form.label({ text:'編号: ' }),

                        id,{   

                            iconcls: "add", text: '搜尋',

                            handler:function(){

                                //注意 sum 需要等資料加載完畢才能計算出來,不然始終為0

                                //alert(store.sum('id'));

                                grid.store.baseparams['id'] = id.getvalue();//防止分頁時丢失

                                grid.store.reload();

                            }  

                         } 

                    ]

                //底部分頁工具條

                bbar: new ext.pagingtoolbar({

                    pagesize: 10,//此處應與limit一緻

                    store: store,

                    displayinfo: true,

                    emptymsg: '沒有記錄'

                })

            }); 

        });

ExtJs 備忘錄(6)—— GirdPanl表格(二) [ 搜尋分頁 ]

      代碼說明:

        實作了非常簡單搜尋和分頁,需要注意的是關于搜尋分頁時搜尋結果丢失的問題,這裡采取了兩個步驟:先是在ext.data.store的baseparams中聲明搜尋傳值變量,然後再點選搜尋按鈕時将搜尋條件存入到baseparams裡,這樣分頁時條件可以保持下來。

    2.2  服務端

      tablepage.aspx.cs

ExtJs 備忘錄(6)—— GirdPanl表格(二) [ 搜尋分頁 ]
ExtJs 備忘錄(6)—— GirdPanl表格(二) [ 搜尋分頁 ]

    public override string search()

    {

        int start = -1;

        int.tryparse(request.querystring["start"], out start);

        int limit = -1;

        int.tryparse(request.querystring["limit"], out limit);

        string id = request.querystring["id"];

        ilist<user> result = new list<user>();

        if (string.isnullorempty(id))

            result = getpage(convertolist(datasource.values), start, limit);

        else

        {

            int uid;

            if (int.tryparse(id, out uid))

            {

                if (datasource.containskey(uid))

                    result.add(datasource[uid]);

            }

        }

        return new stringbuilder().append("{count:")

        .append(1000)

        .append(",result:")

        .append(javascriptconvert.serializeobject(result))

        .append('}')

        .tostring();

    }

    #region 資料源

    private static idictionary<int, user> datasource = new dictionary<int, user>();

    static tablepage()

        for (int i = 0; i < 1000; i++)

            user user = builduser(i);

            datasource.add(user.id, user);

    private static ilist<user> getpage(ilist<user> data, int start, int limit)

        int length = start + limit;

        if (length > data.count)

            length = data.count;

        for (int i = start; i < length; i++)

            result.add(data[i]);

        return result;

    private static ilist<user> convertolist(icollection<user> users)

        user[] result = new user[users.count];

        users.copyto(result, 0);

    private static user builduser(int number)

        return new user()

            id = number,

            email = string.format("test{0}163.com", number),

            name = string.format("test{0}", number),

            gender = new random().next(2)

        };

    class user

        /// <summary>

        /// 編号

        /// </summary>

        public int id { get; set; }

        /// 郵箱

        public string email { get; set; }

        /// 名稱

        public string name { get; set; }

        /// 性别 0 女 1 男

        public int gender { get; set; }

    #endregion

ExtJs 備忘錄(6)—— GirdPanl表格(二) [ 搜尋分頁 ]

    代碼說明:

      這裡仍然沒有連接配接資料庫,模拟資料與分頁查詢。

    2.3  存儲過程

ExtJs 備忘錄(6)—— GirdPanl表格(二) [ 搜尋分頁 ]
ExtJs 備忘錄(6)—— GirdPanl表格(二) [ 搜尋分頁 ]

create procedure dbo.datapager

    (

        @startindex        int = 0 ,

        @limit            int = 15,

        @rowscount        int = 0 output,         -- 輸出記錄總行數

        @sqlstring        varchar(500)            

    )

as

    set nocount on

    select identity(int,1,1) as [newid],* into #tmp_zsflz1 from [tb_xjyjz] where 1=2

    insert into #tmp_zsflz1 exec sp_executesql @sqlstring

    --總行數

    select @rowscount = count([newid]) from #tmp_zsflz

    set @startindex = @startindex + 1

    select * from #tmp_zsflz tz

    where [newid] between @startindex and @startindex + @limit - 1

    drop table #tmp_zsflz

    return

go

ExtJs 備忘錄(6)—— GirdPanl表格(二) [ 搜尋分頁 ]

      雖然本文沒有用到,倒是實際中肯定要用到的,這裡寫一個樣例,僅供參考(注意:這裡是sql2000的例子)。

  三、下載下傳 

結束語

   實在是想再補上點什麼,暫且如此,随後歸類再補上吧。

轉載:http://www.cnblogs.com/over140/archive/2009/11/30/1613130.html

繼續閱讀