国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.Net2.0 GridView 多列排序,顯示排序圖標,分頁

2024-07-10 13:10:22
字體:
來源:轉載
供稿:網友

    最近在使用asp.net 2.0的gridview 控件時,發現排序與分頁功能microsoft實現的都很簡單,比如排序,在點擊列名的時候來觸發整頁的postback,然后排序,但是在列頭上沒有一個顯示升序降序的圖標,這會讓最終用戶使用時很迷惑,因為不知道是升序了還是降序了,所以今天首先解決的第一問題就是升序降序在列上顯示圖標,第二要解決的問題是默認gridview按列排序只能排一列的,也就是不能進行多列排序,而在實際應用中僅僅按照一列來排序是不能滿足業務需求的,第三是gridview 分頁問題,gridview預定義的分頁頁碼顯示,比較簡單,而實際應用中,分頁可能不是只顯示首頁,上一頁,下一頁,末頁,或者是數字的頁碼那么簡單,應該更需要,跳轉,當前的頁碼,總頁數等,更詳盡的信息。

第一:gridview 多列排序與排序圖標顯示

首先我們可以新建一個類庫程序,主要需要引用system.web.dll文件
然后新建一個類,這個類繼承與gridview控件,我們只需要對部分方法進行重新即可。
我的演示的例子,采用了單列排序,如果啟用多列排序,把控件的allowmulticolumnsorting設置為true就是
多列排序。

  1    public class webgridview:gridview
  2    {
  3        屬性#region 屬性
  4        /**//// <summary>
  5        /// 是否啟用或者禁止多列排序
  6        /// </summary>
  7        [
  8        description("是否啟用多列排序功能"),
  9        category("排序"),
 10        defaultvalue("false"),
 11        ]
 12        public bool allowmulticolumnsorting
 13        {
 14            get
 15            {
 16                object o = viewstate["enablemulticolumnsorting"];
 17                return (o != null ? (bool)o : false);
 18            }
 19            set
 20            {
 21                allowsorting = true;
 22                viewstate["enablemulticolumnsorting"] = value;
 23            }
 24        }
 25        /**//// <summary>
 26        /// 升序時顯示圖標
 27        /// </summary>
 28        [
 29        description("升序時顯示圖標"),
 30        category("排序"),
 31        editor("system.web.ui.design.urleditor", typeof(system.drawing.design.uitypeeditor)),
 32        defaultvalue(""),
 33
 34        ]
 35        public string sortascimageurl
 36        {
 37            get
 38            {
 39                object o = viewstate["sortimageasc"];
 40                return (o != null ? o.tostring() : "");
 41            }
 42            set
 43            {
 44                viewstate["sortimageasc"] = value;
 45            }
 46        }
 47        /**//// <summary>
 48        /// 降序時顯示圖標
 49        /// </summary>
 50        [
 51        description("降序時顯示圖標"),
 52        category("排序"),
 53        editor("system.web.ui.design.urleditor", typeof(system.drawing.design.uitypeeditor)),
 54        defaultvalue(""),
 55        ]
 56        public string sortdescimageurl
 57        {
 58            get
 59            {
 60                object o = viewstate["sortimagedesc"];
 61                return (o != null ? o.tostring() : "");
 62            }
 63            set
 64            {
 65                viewstate["sortimagedesc"] = value;
 66            }
 67        }
 68        #endregion
 69        重寫方法#region 重寫方法
 70        protected override void onsorting(gridviewsorteventargs e)
 71        {
 72            if (allowmulticolumnsorting)
 73            {
 74                e.sortexpression = getsortexpression(e);
 75            }
 76
 77            base.onsorting(e);
 78        }
 79        protected override void onrowcreated(gridviewroweventargs e)
 80        {
 81            if (e.row.rowtype == datacontrolrowtype.header)
 82            {
 83                if (sortexpression != string.empty)
 84                {
 85                    displaysortorderimages(sortexpression, e.row);
 86                    this.createrow(0, 0, datacontrolrowtype.emptydatarow, datacontrolrowstate.normal);
 87                }
 88            }
 89            base.onrowcreated(e);
 90        }
 91        #endregion
 92        受保護的方法#region 受保護的方法
 93        /**//// <summary>
 94        ///  獲取排序表達式
 95        /// </summary>
 96        protected string getsortexpression(gridviewsorteventargs e)
 97        {
 98            string[] sortcolumns = null;
 99            string sortattribute = sortexpression;
100
101            if (sortattribute != string.empty)
102            {
103                sortcolumns = sortattribute.split(",".tochararray());
104            }
105            if (sortattribute.indexof(e.sortexpression) > 0 || sortattribute.startswith(e.sortexpression))
106            {
107                sortattribute = modifysortexpression(sortcolumns, e.sortexpression);
108            }
109            else
110            {
111                sortattribute += string.concat(",", e.sortexpression, " asc ");
112            }
113            return sortattribute.trimstart(",".tochararray()).trimend(",".tochararray());
114
115        }
116        /**//// <summary>
117        ///  修改排序順序
118        /// </summary>
119        protected string modifysortexpression(string[] sortcolumns, string sortexpression)
120        {
121            string ascsortexpression = string.concat(sortexpression, " asc ");
122            string descsortexpression = string.concat(sortexpression, " desc ");
123
124            for (int i = 0; i < sortcolumns.length; i++)
125            {
126
127                if (ascsortexpression.equals(sortcolumns[i]))
128                {
129                    sortcolumns[i] = descsortexpression;
130                }
131
132                else if (descsortexpression.equals(sortcolumns[i]))
133                {
134                    array.clear(sortcolumns, i, 1);
135                }
136            }
137
138            return string.join(",", sortcolumns).replace(",,", ",").trimstart(",".tochararray());
139
140        }
141        /**//// <summary>
142        ///  獲取當前的表達式對所選列進行排序
143        /// </summary>
144        protected void searchsortexpression(string[] sortcolumns, string sortcolumn, out string sortorder, out int sortorderno)
145        {
146            sortorder = "";
147            sortorderno = -1;
148            for (int i = 0; i < sortcolumns.length; i++)
149            {
150                if (sortcolumns[i].startswith(sortcolumn))
151                {
152                    sortorderno = i + 1;
153                    if (allowmulticolumnsorting)
154                    {
155                        sortorder = sortcolumns[i].substring(sortcolumn.length).trim();
156                    }
157                    else
158                    {
159                        sortorder = ((sortdirection == sortdirection.ascending) ? "asc" : "desc");
160                    }
161                }
162            }
163        }
164        /**//// <summary>
165        ///  繪制升序降序的圖片
166        /// </summary>
167        protected void displaysortorderimages(string sortexpression, gridviewrow dgitem)
168        {
169            string[] sortcolumns = sortexpression.split(",".tochararray());
170
171            for (int i = 0; i < dgitem.cells.count; i++)
172            {
173                if (dgitem.cells[i].controls.count > 0 && dgitem.cells[i].controls[0] is linkbutton)
174                {
175                    string sortorder;
176                    int sortorderno;
177                    string column = ((linkbutton)dgitem.cells[i].controls[0]).commandargument;
178                    searchsortexpression(sortcolumns, column, out sortorder, out sortorderno);
179                    if (sortorderno > 0)
180                    {
181                        string sortimgloc = (sortorder.equals("asc") ? sortascimageurl : sortdescimageurl);
182
183                        if (sortimgloc != string.empty)
184                        {
185                            image imgsortdirection = new image();
186                            imgsortdirection.imageurl = sortimgloc;
187                            dgitem.cells[i].controls.add(imgsortdirection);
188
189                        }
190                        else
191                        {
192
193                            if (allowmulticolumnsorting)
194                            {
195                                literal litsortseq = new literal();
196                                litsortseq.text = sortorderno.tostring();
197                                dgitem.cells[i].controls.add(litsortseq);
198
199                            }
200                        }
201                    }
202                }
203            }
204
205        }
206        #endregion
207    }

第二:詳盡的分頁信息顯示,此功能沒有封裝成控件形式,直接在gridview_databound事件中對尾頁操作即可。
下面是多列排序與分頁顯示代碼的演示

<script runat="server">
    void pagedropdownlist_selectedindexchanged(object sender, eventargs e)
    {
        gridviewrow pagerrow = customersgridview.bottompagerrow;
        dropdownlist pagelist = (dropdownlist)pagerrow.cells[0].findcontrol("pagedropdownlist");
        customersgridview.pageindex = pagelist.selectedindex;
    }
    void customersgridview_databound(object sender, eventargs e)
    {
        gridviewrow pagerrow = customersgridview.bottompagerrow;
        linkbutton linkbtnfirst = (linkbutton)pagerrow.cells[0].findcontrol("linkbtnfirst");
        linkbutton linkbtnprev = (linkbutton)pagerrow.cells[0].findcontrol("linkbtnprev");
        linkbutton linkbtnnext = (linkbutton)pagerrow.cells[0].findcontrol("linkbtnnext");
        linkbutton linkbtnlast = (linkbutton)pagerrow.cells[0].findcontrol("linkbtnlast");
        if (customersgridview.pageindex == 0)
        {
            linkbtnfirst.enabled = false;
            linkbtnprev.enabled = false;
        }
        else if (customersgridview.pageindex == customersgridview.pagecount-1)
        {
            linkbtnlast.enabled  = false;
            linkbtnnext.enabled = false;
        }
        else if (customersgridview.pagecount<=0)
        {
            linkbtnfirst.enabled = false;
            linkbtnprev.enabled = false;
            linkbtnnext.enabled = false;
            linkbtnlast.enabled = false;
        }
        dropdownlist pagelist = (dropdownlist)pagerrow.cells[0].findcontrol("pagedropdownlist");
        label pagelabel = (label)pagerrow.cells[0].findcontrol("currentpagelabel");
        if (pagelist != null)
        {
            for (int i = 0; i < customersgridview.pagecount; i++)
            {
                int pagenumber = i + 1;
                listitem item = new listitem(pagenumber.tostring() + "/" + customersgridview.pagecount.tostring(), pagenumber.tostring());
                if (i == customersgridview.pageindex)
                {
                    item.selected = true;
                }
                pagelist.items.add(item);
            }
        }
        if (pagelabel != null)
        {
            int currentpage = customersgridview.pageindex + 1;
            pagelabel.text = "當前頁: " + currentpage.tostring() +
              " / " + customersgridview.pagecount.tostring();
        }
    }
</script>
<html>
<body>
    <form id="form1" runat="server">
        <h3>
            gridview pagertemplate example</h3>
        <asp:webgridview id="customersgridview" datasourceid="customerssqldatasource" autogeneratecolumns="true"
            allowpaging="true" ondatabound="customersgridview_databound" sortascimageurl="~/images/arrow-up.gif" sortdescimageurl="~/images/arrow-down.gif" runat="server" allowsorting="true" width="723px">
            <pagerstyle forecolor="blue" backcolor="lightblue" />
            <pagertemplate>
                <table width="100%">
                    <tr>
                        <td width="70%">
                            <asp:label id="messagelabel" forecolor="blue" text="頁碼:" runat="server" />
                            <asp:dropdownlist id="pagedropdownlist" autopostback="true" onselectedindexchanged="pagedropdownlist_selectedindexchanged"
                                runat="server" />
                            <asp:linkbutton commandname="page" commandargument="first" id="linkbtnfirst" runat="server">首頁</asp:linkbutton>
                            <asp:linkbutton commandname="page" commandargument="prev" id="linkbtnprev" runat="server">上一頁</asp:linkbutton>
                            <asp:linkbutton commandname="page" commandargument="next" id="linkbtnnext" runat="server">下一頁</asp:linkbutton>
                            <asp:linkbutton commandname="page" commandargument="last" id="linkbtnlast" runat="server">末頁</asp:linkbutton>
                        </td>
                        <td width="70%" align="right">
                            <asp:label id="currentpagelabel" forecolor="blue" runat="server" />
                        </td>
                    </tr>
                </table>
            </pagertemplate>
       </asp:webgridview>
        <asp:sqldatasource id="customerssqldatasource" selectcommand="select [customerid], [companyname], [address], [city], [postalcode], [country] from [customers]"
            connectionstring="<%$ connectionstrings:northwindconnectionstring%>" runat="server">
        </asp:sqldatasource>
    </form>
</body>
</html>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 读书| 昭通市| 海晏县| 芮城县| 广宁县| 永兴县| 长治市| 英德市| 什邡市| 陆良县| 锦屏县| 岚皋县| 东乌珠穆沁旗| 灵宝市| 墨竹工卡县| 平遥县| 略阳县| 开江县| 彭泽县| 华亭县| 芦溪县| 尚义县| 盐城市| 庆云县| 永川市| 塔城市| 嘉黎县| 钟山县| 九寨沟县| 韶关市| 临颍县| 论坛| 临清市| 通州区| 桂林市| 普陀区| 柘荣县| 郯城县| 北辰区| 安西县| 岳阳县|