[WAP]dotNet在WAP应用开发中实现按指定页数翻页的解决方案

 

dotNetWAP应用开发中实现按指定页数翻页的解决方案

发布日期: 8/30/2005  更新日期: 8/30/2005

write by PanQi@Ultrapower

简介:采用dotNet开发WAP应用,通常会遇到翻页的问题,在dotNetList控件中虽然提供ItemCountItemsPerPage属性来实现翻页,但这种自带的翻页只能实现上一页下一页的翻页效果,无法按指定页数来选择性翻页,因此,很有必要开发自己的翻页机制,来完善它的不足之处,本文档将一步一步介绍如何用.Net提供有限的MobileControl来实现按指定页数翻页。

如您要转贴,请保留原出处,并勿做删改。谢谢。


源码下载>>

方案一:采用数据绑定,指定数据源(
DataTable)实现翻页的方法

第一步,打开VS.Net,新建Asp.Net移动Web应用,我们这里将项目命名为WapPager,如下图:

 



第二步,向
Form里拖入所需控件:

Label控件,一个,用于显示提示消息。

List控件,一个,用于绑定数据,显示指定范围内的记录。

Panel控件,一个,用于存放表达式计算出的n个页面的Link页码。

页面布局如下图所示:




 

第三步,修改控件属性,为编码作准备(具体属性设置请看Demo)。

第四步,编码。(说明:演示数据来自SQL-ServerNorthWind数据库)

为了实现翻页效果,需要用到下面三个方法,分别是:

1、 GetAllData()方法:

GetAllData是获取全部数据,返回DataTable的方法,之所以采用DataTable来存放全部数据,主要是为了后面用DataTableSelect方法来获取其中指定范围内记录

private DataTable GetAllData()
{
    
this.sqlDataAdapter1.Fill(this.dataSet11);
    
return this.dataSet11.Tables["Products"];
}


2、 GetPage()方法:

GetPage是通过数据总数、每页规定显示数量,计算出页数的方法,返回存放全部页码的DataTable,我们为这个DataTable定义了LinkText和LinkUrl两列,这两列的值供页码控件Link绑定数据所用。

private DataTable GetPage() 

    DataTable dtPage 
= new DataTable(); 
    DataTable dtAllData 
= this._dtAllData; 
    
int dataCount = dtAllData.Rows.Count; 
    
int    pageCount = 0
    
if((dataCount%GlobalConfig.Size) == 0
    

        pageCount 
= dataCount/GlobalConfig.Size; 
    }
 
    
if((dataCount%GlobalConfig.Size) != 0
    

        pageCount 
= dataCount/GlobalConfig.Size + 1
    }
 
    dtPage.Columns.Add(
"LinkText",typeof(String)); 
    dtPage.Columns.Add(
"LinkUrl",typeof(String)); 
    
for(int i = 0;i < pageCount; i++
    

        DataRow row 
= dtPage.NewRow(); 
        row[
"LinkText"= i + 1
        
if(i == 0
        

            row[
"LinkUrl"= "MobileWebForm1.aspx?startID=" + ((i*GlobalConfig.Size)) + "&selectPage=" + i;  
        }
 
        
else 
        

            row[
"LinkUrl"= "MobileWebForm1.aspx?startID=" + ((i*GlobalConfig.Size) + 1+ "&selectPage=" + i;  
        }
 
        dtPage.Rows.Add(row); 
    }
 
    
return dtPage; 
}
 
 


3、 SelectTable()方法:

SelectTable方法是利用DataTable自身的Select方法,传入起始值,读取指定行数记录,最终实现翻页效果.

private void SelectTable(int startID) 

    
try 
    

        DataTable dtAllData        
= this._dtAllData; 
        DataTable dtSelectData    
= new DataTable(); 
        dtSelectData.Columns.Add(
"ProductID",typeof(String)); 
        dtSelectData.Columns.Add(
"ProductName",typeof(String)); 
        
string strExpr; 
        
int endID = startID + GlobalConfig.Size; 
        
if(startID == 0
        

            strExpr 
= "ProductID >= "+ startID +" and ProductID <= "+ endID +""
        }
 
        
else 
        

            strExpr 
= "ProductID >= "+ startID +" and ProductID < "+ endID +""
        }
 
        
if(dtAllData != null && dtAllData.Rows.Count > 0
        

            DataRow[] foundRows 
= dtAllData.Select(strExpr); 
            
string flag1 = foundRows.Length.ToString(); 
            
for(int i = 0; i < foundRows.Length; i ++
            

                DataRow row             
= dtSelectData.NewRow(); 
                row[
"ProductID"]     = foundRows[i][0]; 
                row[
"ProductName"]     = foundRows[i][1]; 
                dtSelectData.Rows.Add(row); 
            }
 
            
if(dtSelectData != null && dtSelectData.Rows.Count > 0
            

                
this.List.DataSource = dtSelectData; 
                
this.List.DataBind(); 
            }
 
            
try 
            

                DataTable dtPage 
= GetPage(); 
                
string selectPage = Page.Request["SelectPage"]; 
                
for(int i = 0; i < dtPage.Rows.Count; i++
                

                    Link link 
= new System.Web.UI.MobileControls.Link(); 
                    
if(i == Convert.ToInt32(selectPage)) 
                    

                        link.Text 
= "[本页" + dtPage.Rows[i][0].ToString() + "]"
                    }
 
                    
else 
                    

                        link.Text 
= "[" + dtPage.Rows[i][0].ToString() + "]"
                    }
 
                    link.NavigateUrl 
= dtPage.Rows[i][1].ToString(); 
                    link.ID 
= i.ToString(); 
                    link.BreakAfter 
= false
                    
this.Panel.Controls.Add(link); 
                }
 
            }
 
            
catch(Exception exc) 
            

                
this.lblMessage.Text = exc.Message; 
                
this.lblMessage.Visible = true
            }
 
        }
 
        
else 
        

            
this.lblMessage.Text = "没有记录!"
            
this.lblMessage.Visible = true
        }
 
    }
 
    
catch(Exception exc) 
    

        
this.lblMessage.Text = exc.Message; 
        
this.lblMessage.Visible = true
    }
 
}
 

页面最终效果:  
 

注:每页显示最多记录条数可以在Web.Config的GlobalSection属性Record.Page.Size节点自行定义,默认为每页显示10条记录。

 

 


write by PanQi@Ultrapower

 

 

 

 

 

 

posted @ 2005-08-30 17:53 Frank Pan 阅读(2662) 评论(13) 编辑 收藏

 回复 引用 查看   
#1楼 2005-08-31 08:37 子扬's Blog      
支持一下。发现博客园里关于wap的话题还是很少的。
www.chinatranslation.net
在线翻译列表 欢迎进行友情链接

[URL=http://www.chinatranslation.net]翻译公司广州翻译公司本地化[/URL]
[URL=http://www.readworld.com/tran">http://www.readworld.com/tran]上海翻译公司,即时翻译[/URL]
[URL=http://tech.china.com/translate]北京翻译公司[/URL]
[URL=http://***]Translation company Chinese Translation translation agency[/URL]
[URL=http://www.chinatranslation.net/xiamen.asp]Translation company Chinese Translation translation agency website localization software localization Desktop Publishing[/URL]
[URL=http://www.readworld.com]翻译,翻译公司,上海翻译公司,广州翻译公司[/URL]
[URL=http://www.chinatranslation.net/tianjin.asp]天津翻译公司[/URL]
[URL=http://www.chinatranslation.net/shenzhen.asp]深圳翻译公司[/URL]

 回复 引用 查看   
#3楼 2005-08-31 10:41 宇文拓      
支持
我最近也在搞ASP.NET Mobile

 回复 引用   
#4楼 2005-09-01 09:57 scorpion[未注册用户]
支持!!wap将来有前途!!

 回复 引用   
#5楼 2005-09-19 11:17 wapdotnet[未注册用户]
欢迎访问: http://www.wapdotnet.com
用asp.net等开发wap的技术论坛

不错!希望和你成为朋友!me:28767360
me网站:www.aspxcn.org/default.aspx

 回复 引用   
#7楼 2005-12-05 12:19 jeanson[未注册用户]
怎么在手机模拟器上浏览呢?我用m3gate和winwap都不能正常显示?
是不是webconfig要配置啊?

 回复 引用 查看   
#8楼[楼主] 2005-12-05 12:41 MyXQ      
是的,需要在Web.Config的<system.web>里加入下面代码:
<!--
browserCaps:控制浏览器功能组件的设置。<browserCaps> 元素可以在计算机、站点、应用程序和
子目录级别声明。可以根据要求对 <browserCaps> 元素进行更新以检测将来的浏览器和浏览器功能。


http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpgenref/html/gngrfbrowsercapssection.asp
如果没有这个定义,M3Gate模拟器将无法浏览本站点!
-->

<browserCaps>
<result type="System.Web.Mobile.MobileCapabilities, System.Web.Mobile, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<use var="HTTP_USER_AGENT"/>
preferredRenderingType = "wml11"
preferredRenderingMime = "text/vnd.wap.wml"
preferredImageMime = "image/vnd.wap.wbmp"
</browserCaps>

 回复 引用   
#9楼 2006-11-07 16:58 黄兴华[未注册用户]
下了源码 看了 不是很懂 好笨 啊 能教教 我吗? 一直对分页 迷糊
这个可以用 查询分页吗?   我QQ 444539298

 回复 引用   
#10楼 2007-09-09 11:24 张平抑[未注册用户]
MSN监视软件

http://www.msn-jianshi.cn



 回复 引用   
#11楼 2007-10-12 19:28 ry4[未注册用户]
北京有几家好的翻译公司?推荐一家好的翻译公司给你认识,翻译速度快,质量好。www.jiayinte.cn
推荐一个好的翻译论坛给你认识,各行业翻译词汇,专业术语应有尽有,是翻译的好帮手。www.jiayinte.net/sn1/bbs/
北京有几家好的同传翻译公司?推荐一家好的翻译公司给你认识,质量好www.czfw.net

 回复 引用   
#12楼 2007-10-30 19:14 fanyi [未注册用户]
北京有几家好的翻译公司?推荐一家好的翻译公司给你认识,翻译速度快,质量好。www.jiayinte.cn
推荐一个好的翻译论坛给你认识,各行业翻译词汇,专业术语应有尽有,是翻译的好帮手。www.jiayinte.net/sn1/bbs/
北京有几家好的同传翻译公司?推荐一家好的翻译公司给你认识,质量好www.czfw.net



 回复 引用   
#13楼 2008-12-18 12:26 fire0147[未注册用户]
支持一下,关于asp.net wap的资料太少了