myPage —— asp.net分页控件的使用示例。基本应用和查询功能

自然框架 2008-06-28 08:17:12
myPage分页控件发出来之后,虽然开源了,但是没有给一个简单一点的 demo,真是漏掉了一个很重要的部分。

先说明一下使用myPage分页控件需要的文件。

Controls.dll :这个是分页控件的dll文件,您可能要问,为什么不叫 myPage.dll呢?因为里面不仅有分页控件,还包含其他的控件,比如扩展功能的TextBox等控件,这是多个控件的集合,所以就叫做 Controls.dll 了。对应的有一个Controls.XML文件,里面放的是控件里的属性、函数、事件的提示说明。这个可以更方便使用。需要把这两个文件放在bin目录里面。

提示效果:


DataAccess2.0.dll :这个不属于分页控件,他是数据访问函数库的dll文件,因为分页控件要调用这里面的函数来提取数据,所以也需要把这个dll文件放在bin目录下面。他也有一个对应的 DataAccess2.0.xml 文件。

压缩包里的其他文件
vs200802.dll 这个是演示程序的 dll文件。
Default.aspx 这里就是分页控件的演示代码了。


要想写一个demo还真不是容易的事情,IDE就有两个,vs2005和vs2008,有都可以建立“网站”和“项目”,组合一下就是四种demo。我比较懒,给自己偷个懒吧,用vs2005写一个建立“网站”的demo,再用vs2008写一个“项目”的demo吧。(ps:vs2005还没有打上sp1呢,所以想建立项目也建立不了:) )

先说一下公用的部分吧,需要在web.config里面配置连接字符串和数据库类型。
<appSettings>
<add key="DataType" value="1"/>
</appSettings>
<connectionStrings>
<add name="ConnStr" connectionString="Data Source=.;Initial Catalog=AdventureWorks ;persist security info=False;user id=sa;pwd=admin;" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
DataType = 1 表示使用sql Server数据库。

ConnStr 是连接字符串。这里使用 SQL Server2005自带的 AdventureWorks 数据库,不知道大家有没有安装。如果没有安装的话,需要在这里换成其他的数据库。当然 Data Source 等也需要做相应的修改。

下面说一下vs2005里面使用分页控件地方法,截了几个图,方便大家阅读。

1、添加引用。
怎么建立项目就不用说了吧。项目建立之后需要引用分页控件需要的dll文件。
在“解决方案资源管理器”点击右键,选择“添加引用”。


然后呢会打开“添加引用”对话框,选择“浏览”标签。


找到 Controls.dll 文件,单击确定。好了,分页控件就会被引用到项目里了。下一步是在工具箱里面添加分页控件。

2、工具箱里添加分页控件。



点击“选择项”,打开“选择工具箱项”


使用“浏览”按钮,找到Controls.dll 文件,然后里面的控件就会加载进来,就是选中的这几个。单击确定,就可以加到工具箱里面了。



然后往页面上拽一个GridView,和一个JYKPage(控件里还没有改名:) ),用做测试,GridView的ID是GV,分页控件的ID:myPage1。GridView采用“自动生成字段”的方式。




dll和控件都加载完毕,下面可以写代码了。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
setPageInfo();
}

private void setPageInfo()
{
//以下三个属性必须赋值
this.myPage1.ControlGridID = this.GV.ID;

this.myPage1.TableName = " Person.Contact"; //表名或者视图名
this.myPage1.TableOrderColumns = "FirstName,ContactID "; //排序字段,可以写多个字段

//以下属性可以不赋值
this.myPage1.TableShowColumns = "*"; //显示的字段,可以不填,默认为 *
this.myPage1.PageSize = 5; //一页显示的记录数,默认一页显示20条记录
this.myPage1.TableQuery = ""; //查询条件,不包含 where
this.myPage1.NaviCount = 8; //页号导航的数量,默认10个

//这个函数必须执行,而且要在给上面的属性赋值之后执行。
this.myPage1.BindFirstPage();

}

然后运行程序。提示一下,运行前要修改web.config文件,设置连接字符串。另外还有一点,需要在根目录下面建立一个 log文件夹,如果运行程序出现错误(和数据访问相关的),那么会在这个文件夹里面建立一个文本文件,在里面写出错信息,您可以根据这里的信息来判断出错的原因。
需要给log文件夹设置一下权限,User用户的“写入”权限,否则无法写入信息。如图:


如果没有什么意外的话,您会看到下面的效果。



GridView没有做什么处理,大家忍受一下先。:)

最少写四行代码就可以实现分页的功能,显示数据就交给GridView了。什么您问是不是漏了一件事情,翻页时产生的事件还没有说呢,这个在默认的情况下是不用自行处理的。分页控件就可以自己处理。

还要写代码,好像没有GridView + SQLDataSource方便。我想了一下,好像确实没有什么优势,要说优点嘛,好像只有两个,一个是分页控件是按需索取,一页显示五条数据的话,那么就到数据库里提取五条,多一条不取(听说GridView在分页的时候还是会把表里的数据都拿出来,然后在内存里面分页)。另一个就是,GridView + SQLDataSource只能在vs05、08里面使用,不能在vs2003里面使用,而我的分页控件可以在vs2003里面使用。当然要选用for .net1.1的版本。
(ps:04年底,分页控件就可以这么用了。)



--------------------------------------------------------------------------------

下面说一下vs2008里面使用分页控件的方法,其实和在05里面也没有什么大的区别。

1、引用dll文件





2、工具里添加分页控件





3、编写代码。这个嘛,其实和vs05里面的是一样的,就不重复贴了。

4、运行。

还是要先修改一下web.config文件,再根目录里面建立一个log文件夹。




--------------------------------------------------------------------------------

最后说一下如何实现查询功能。

在页面里拖拽两个JYKTextBox,对没写错买就是这个,他在分页控件的下数第二个控件,再加一个button按钮。
我们假设需要按照字段 LastName、Phone 来进行模糊查询。在按钮的Btn_Search_Click事件里面写如下代码即可。

protected void Btn_Search_Click(object sender, EventArgs e)
{
//TableName等属性已经在ViewState 里面保存了,所以查询的时候不用再次赋值。

//组合查询条件
string query = "";

string key = this.Txt_LastName.TextTrimNone;

if (key.Length > 0)
{
query = "LastName like '%" + key + "%'";
}

key = this.Txt_Phone.TextTrimNone;
if (key.Length > 0)
{
if (query.Length == 0)
query = "Phone like '%" + key + "%'";
else
query += " and Phone like '%" + key + "%'";
}

this.myPage1.TableQuery = query; //添加查询条件
this.myPage1.BindFirstPage(); //重新显示数据,控件内部会重新生成SQL语句。

}

运行效果




demo的下载地址:http://www.cnblogs.com/jyk/archive/2008/04/25/1170979.html
还是在随笔的下面。

晕了,图片没有带过来,图片太多,不一一贴了,看这里吧。http://www.cnblogs.com/jyk/archive/2008/06/27/1231337.html
...全文
1699 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhdxhj 2010-12-21
  • 打赏
  • 举报
回复
mark
自然框架 2008-07-06
  • 打赏
  • 举报
回复
十分感谢。
编程有钱人了 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jyk 的回复:]
不好意思,没有说详细,害得你受苦了。
目前还不支持 mySQL 。您能告诉我,在asp.net里面怎么访问mySQL吗?
[/Quote]
这是部分代码 你看看

using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MySql.Data.MySqlClient;
/// <summary>
/// Business 的摘要说明
/// </summary>
public class Business
{
DataBase db = new DataBase();
public Business()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public DataSet GetPro(string strSQL,string TableName)
{
MySqlConnection conn = db.MyConnection();
MySqlDataAdapter da = new MySqlDataAdapter(strSQL,conn);
DataSet ds = new DataSet();
da.Fill(ds,TableName);
return ds;
}
public MySqlDataReader ShowList(string ssql)
{
MySqlConnection conn = db.MyConnection();
MySqlCommand comm = new MySqlCommand(ssql, conn);
try
{
conn.Open();
MySqlDataReader dr = comm.ExecuteReader();
return dr;
}
catch (Exception X)
{
throw X;
}
finally
{
conn.Close();
comm.Dispose();
}

}
}
自然框架 2008-06-29
  • 打赏
  • 举报
回复
不好意思,没有说详细,害得你受苦了。
目前还不支持 mySQL 。您能告诉我,在asp.net里面怎么访问mySQL吗?
编程有钱人了 2008-06-29
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jyk 的回复:]
不好意思,没有说详细,害得你受苦了。
目前还不支持 mySQL 。您能告诉我,在asp.net里面怎么访问mySQL吗?
[/Quote]

<connectionStrings>
<add name="ConnStr" connectionString="server=localhost;database=my;user id=root;password=281875;" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web
就是这样的
bluedoctor 2008-06-28
  • 打赏
  • 举报
回复
this.myPage1.TableQuery =" select * from 表 where Phone='Nokia' "
我的可以做大,看上面的连接。
bluedoctor 2008-06-28
  • 打赏
  • 举报
回复
我的可以做大,看上面的连接。
bluedoctor 2008-06-28
  • 打赏
  • 举报
回复
http://www.pwmis.cn/homepage/4/doc/XX项目系统架构概要介绍.doc
大家有兴趣看看这个,里面有分页控件设计内幕。
编程有钱人了 2008-06-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jyk 的回复:]
this.myPage1.TableQuery = "";

这个就是负责查询条件的呀。

this.myPage1.TableQuery =" select * from 表 where Phone='Nokia' ";??

如果直接这么写的话,会比较麻烦,因为在第一次访问的时候要设置这个属性,要写一遍表名和字段名,这时没有 where条件。

在查询的时候还要这么设置的话,意味着,还要写一遍表名和字段名,这就是重复,一个表名出现了两次,如果表明变化了,就要修改两个地方,您愿…
[/Quote]


谢谢LZ的热心回答
我明白了!~~呵呵!~~~
linzuoyi 2008-06-28
  • 打赏
  • 举报
回复
amandag 2008-06-28
  • 打赏
  • 举报
回复
学习 + 收藏
自然框架 2008-06-28
  • 打赏
  • 举报
回复
this.myPage1.TableQuery = "";

这个就是负责查询条件的呀。

this.myPage1.TableQuery =" select * from 表 where Phone='Nokia' ";??

如果直接这么写的话,会比较麻烦,因为在第一次访问的时候要设置这个属性,要写一遍表名和字段名,这时没有 where条件。

在查询的时候还要这么设置的话,意味着,还要写一遍表名和字段名,这就是重复,一个表名出现了两次,如果表明变化了,就要修改两个地方,您愿意吗?

this.myPage1.TableQuery = “ Phone='Nokia' ”; //添加查询条件

查询的时候就是查询,一般表名是不变的,所以没有必要再写一遍。
编程有钱人了 2008-06-28
  • 打赏
  • 举报
回复
如果我用where 怎么怎么办?
比如

select * from 表 where Phone='Nokia'


能不能直接this.myPage1.TableQuery =" select * from 表 where Phone='Nokia' ";??呢
自然框架 2008-06-28
  • 打赏
  • 举报
回复


soldierluo 2008-06-28
  • 打赏
  • 举报
回复
偶也不会用,有步骤就说详细点撒
编程有钱人了 2008-06-28
  • 打赏
  • 举报
回复
于是 DataType = 1
这个值 我从1--7挨个试
没一个是对的,难道还有第8种数据库???
MySql数据库是几??
你不回答?我继续试
到20就不试了
我就不信 有20多种数据库!~~~
编程有钱人了 2008-06-28
  • 打赏
  • 举报
回复
差点忘了
你说过

先说一下公用的部分吧,需要在web.config里面配置连接字符串和数据库类型。
<appSettings>
<add key="DataType" value="1"/>
</appSettings>
<connectionStrings>
<add name="ConnStr" connectionString="Data Source=.;Initial Catalog=AdventureWorks ;persist security info=False;user id=sa;pwd=admin;" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
DataType = 1 表示使用sql Server数据库。

可是我用的是MySql数据库
那么DataType该是几啊?
编程有钱人了 2008-06-28
  • 打赏
  • 举报
回复
lZ我今天用了05的试了试,(方法按你上面说的,该引用的引用了,该加控件的家了)
出现了一个问题不知道什么原因你帮看看

错误信息
“JYK.Data.DbBase”的类型初始值设定项引发异常。

我的代码

protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
this.ShowProducts();
JYKPage1.ControlGridID = "DataList1";
this.SetPageInfo();

}
}
private void ShowProducts()
{
string ssql = "select id,ProductSerial,ProductName,PicUrl from products";
DataSet ds = db.GetDataSet(ssql,"b");
this.DataList1.DataSource = ds.Tables["b"].DefaultView;
this.DataList1.DataBind();
}
public static string PLeft(object Content, int length)
{
if ((Content == null) || !(Content is string))
{
return string.Empty;
}
if (((string)Content).Length > length)
{
Content = ((string)Content).Substring(0, length) + "...";
}
return (string)Content;
}

private void SetPageInfo()
{
JYKPage1.TableName= "products"; //表名或者视图名
JYKPage1.TableShowColumns = "id,ProductSerial,ProductName,PicUrl"; //显示的字段
JYKPage1.TableIDColumns = "id"; //主键
JYKPage1.TableOrderColumns = "id";//排序字段
JYKPage1.PageSize = 10;//一页的记录数
JYKPage1.NaviCount = 5; //页号导航的数量
this.JYKPage1.TableQuery = ""; //查询条件
JYKPage1.BindFirstPage();////显示第一页的数据

}


<cc1:JYKPage ID="JYKPage1" runat="server" />


<appSettings>
<add key="DataType" value="1"/>
</appSettings>


看看这些有什么错误??

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧