Web 组合查询加 分页
使用ADO.NET 数据访问技术制作web端组合查询加分页的功能关键在于查询SQL语句的拼接
以Car 表为例 每页显示3条数据

数据访问类使用查询方法,tsql 查询的连接字符串,查询的参数放到Hashtable中
public List<Car> Select(string tsql, Hashtable hh)
{
List<Car> list = new List<Car>();
cmd.CommandText = tsql;
cmd.Parameters.Clear();
foreach (string k in hh.Keys)
{
cmd.Parameters.Add(k, hh[k]);
}
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Car c = new Car();
c.Code = dr["Code"].ToString();
c.Name = dr["Name"].ToString();
c.Brand = dr["Brand"].ToString();
c.Oil = Convert.ToDecimal(dr["Oil"]);
c.Powers = Convert.ToInt32(dr["Powers"]);
c.Exhaust = Convert.ToInt16(dr["Exhaust"]);
c.Price = Convert.ToDecimal(dr["Price"]);
list.Add(c);
}
}
conn.Close();
return list;
}
后台代码封装查询连接字符的方法
/// <summary>
/// 拼接查询分页的SQL语句
/// </summary>
/// <param name="pagenumber">显示第几页</param>
/// <param name="isall">查最大页数的SQL语句</param>
/// <returns>查询sql语句的字符创</returns>
public string ReturnTsql(int pagenumber,bool isall)
{
hs.Clear();//清空哈希表数据
int count = ;//文本是否输内容
string Tsql = "select top " + pagecount + " *from Car";
if (isall)//true查所有拼接的语句
Tsql = "select *from Car";
string tj = "";
if (!string.IsNullOrEmpty(TextBox_name.Text.Trim()))//文本框有内容
{
Tsql += " where Name like @a";
tj += "where Name like @a";
hs.Add("@a", "%" + TextBox_name.Text.Trim() + "%");
count++;
}
if (!string.IsNullOrEmpty(TextBox_oil.Text.Trim()))
{
if (count == )
{
Tsql += " where Oil" + DropDownList_oil.SelectedValue + " @b";
tj += " where Oil" + DropDownList_oil.SelectedValue + " @b";
}
else
{
Tsql += " and Oil" + DropDownList_oil.SelectedValue + " @b";
tj += " and Oil" + DropDownList_oil.SelectedValue + " @b";
}
hs.Add("@b", TextBox_oil.Text.Trim());
count++;
}
if (!string.IsNullOrEmpty(TextBox_price.Text.Trim()))
{
if (count == )
{
Tsql += " where Price" + DropDownList_pri.SelectedValue + " @c";
tj += " where Price" + DropDownList_pri.SelectedValue + " @c";
}
else
{
Tsql += " and Price" + DropDownList_pri.SelectedValue + " @c";
tj += " and Price" + DropDownList_pri.SelectedValue + " @c";
}
hs.Add("@c", TextBox_price.Text.Trim());
count++;
}
//最终拼接的TSQL语句
if (count > )//文本框有输入
{
Tsql += " and Code not in(select top " + (pagecount * (pagenumber - )) + " Code from Car " + tj + ")";
}
else//没有输入
{
Tsql += " where Code not in(select top " + (pagecount * (pagenumber - )) + " Code from Car " + tj + ")";
}
return Tsql;
}
//查询最大页数
public int Maxpage(string tsql,Hashtable has)
{
List<Car> clist = new CarData().Select(tsql, has);
return Convert.ToInt32(Math.Ceiling(clist.Count / (pagecount * 1.0)));
}
功能代码 (查询 首页 下一页)
int pagecount = ;//每页显示的数据
Hashtable hs = new Hashtable();//实例化一个全局的哈希表集合
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)//加载页面数据绑定
{
Repeater1.DataSource = new CarData().Select(ReturnTsql(,false), hs);
Repeater1.DataBind();
Label_now.Text = "";//当前页数
Label_max.Text = Maxpage(ReturnTsql(,true), hs).ToString();//最大页数
DropDownList_jump.Items.Clear();//跳转页下拉列表数据绑定
for (int i = ; i <= Maxpage(ReturnTsql(, true), hs); i++)
{ DropDownList_jump.Items.Add(new ListItem(i.ToString(),i.ToString()));
}
}
Button_sel.Click += Button_sel_Click;//查询
LinkButton_frist.Click += LinkButton_frist_Click;//首页
LinkButton_prve.Click += LinkButton_prve_Click;//上一页
LinkButton_next.Click += LinkButton_next_Click;// 下一页
LinkButton_last.Click += LinkButton_last_Click;//尾页
DropDownList_jump.SelectedIndexChanged += DropDownList_jump_SelectedIndexChanged;//跳转
}
void Button_sel_Click(object sender, EventArgs e)// 查询
{
Label_now.Text = "";
Label1.Text = ReturnTsql(, false);
Repeater1.DataSource = new CarData().Select(ReturnTsql(, false), hs);
Repeater1.DataBind();
Label_max.Text = Maxpage(ReturnTsql(, true), hs).ToString();
DropDownList_jump.Items.Clear();
for (int i = ; i <= Maxpage(ReturnTsql(, true), hs); i++)
{ DropDownList_jump.Items.Add(new ListItem(i.ToString(), i.ToString()));
}
}
void LinkButton_frist_Click(object sender, EventArgs e)//首页
{
Label_now.Text = "";
Repeater1.DataSource = new CarData().Select(ReturnTsql(, false), hs);
Repeater1.DataBind();
//上一页按钮不可用,下一页按钮可用
LinkButton_next.Enabled = true;
LinkButton_prve.Enabled = false;
}
void LinkButton_next_Click(object sender, EventArgs e)//下一页
{
int pagenumber = Convert.ToInt32(Label_now.Text) + ;
Repeater1.DataSource = new CarData().Select(ReturnTsql(pagenumber, false), hs);
Repeater1.DataBind();
Label_now.Text = pagenumber.ToString();//改变当前页数的显示数据
if (pagenumber >= Maxpage(ReturnTsql(,true),hs))//大于最大页数下一页按钮不可用
{
LinkButton_next.Enabled = false;
}
LinkButton_prve.Enabled = true;
}
Web 组合查询加 分页的更多相关文章
- LINQ 小项目【组合查询、分页】
使用 linq 在网页上对用户信息增删改,组合查询,分页显示 using System; using System.Collections.Generic; using System.Linq; us ...
- webform组合查询和分页
1.组合查询(1)数据访问类 //参数1:SQL语句 参数2:哈希表public List<Users> chas(string s,Hashtable has) { List<Us ...
- Linq组合查询与分页组合查询结合
1.组合查询 <div>姓名:<asp:TextBox ID="T1" runat="server"></asp:TextBox& ...
- LinQ 组合查询与分页
1.以开头查 public List<Car> Select1(string a){ return con.Car.Where(r => r.Name.StartsWith(a)). ...
- spring boot jpa 多条件组合查询带分页的案例
spring data jpa 是一个封装了hebernate的dao框架,用于单表操作特别的方便,当然也支持多表,只不过要写sql.对于单表操作,jpake可以通过各种api进行搞定,下面是一个对一 ...
- LinkQ 组合查询与分页
1.以开头查 public List<Car> Select1(string a){ return con.Car.Where(r => r.Name.StartsWith(a)). ...
- LINQ 组合查询 和分页查询的使用
前端代码 <%@ Page Language="C#" AutoEventWireup="true" Debug="true" Cod ...
- linq分页组合查询
一.linq高级查 1.模糊查(字符串包含) 1 public List<User> Select(string name) 2 { 3 return con.User.Where(r = ...
- Webform(Linq高级查、分页、组合查询)
一.linq高级查 1.模糊查(包含) 1 public List<User> Select(string name) 2 { 3 return con.User.Where(r => ...
随机推荐
- 魅族M8时期写过几个app,纪念一下曾经的自己
找工作的过程中也看了不少资料和文章,也学着别人弄弄博客,但发现自己临时的行为有点那啥吧..曾经我也写过不少东西,有过自己的一个技术论坛,为当时的魅族M8手机写过一个系列的技术帖子,但因为论坛被我关了, ...
- GOTO Berlin: Web API设计原则
在邮件列表和讨论区中有很多与REST和Web API相关的讨论,下面仅是我个人对这些问题的一些见解,并没有绝对的真理,InnoQ的首席顾问Oliver Wolf在GOTO Berlin大会上开始自己的 ...
- Module-Zero之租户管理
返回<Module Zero学习目录> 开启多租户 租户实体 租户管理者 默认租户 开启多租户 ABP和Module-Zero可以运行多租户或单租户模式.多租户默认是禁用的.我们可以在mo ...
- 固定Table的头部和左边的列-在Knockout Js使用场景下
要求:固定Table的头部和左边的列 场景:Knockout Js被用于绑定Table的数据源. 固定HTML表格的头部和列是一个很常见的需求.此文:http://www.cnblogs.com/so ...
- avascript中的this与函数讲解
徐某某 一个半路出家的野生程序员 javascript中的this与函数讲解 前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大 ...
- fir.im Weekly - 暖心的 iOS 持续集成,你值得拥有
一则利好消息,flow.ci 支持 iOS 项目持续集成,想试试的伙伴去 Gitter群 问问.首批尝鲜用户@阿米amoy 已经用 flow.ci 实现了基本的 iOS 持续集成,并详细记录整个 Bu ...
- SQL Server Audit监控触发器状态
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 注意事项(Attention) 疑问(Questions) 参 ...
- SQL Server 无法生成 FRunCM 线程。请查看 SQL Server 错误日志和 Windows 事件日志
1.IP地址配置不正确: 打开 Microsoft SQL Server 2005配置工具下的SQL Server Configuration Manager,选择MSSQLSERVER协议, 然后双 ...
- 安装CentOS、Linux系统时,GPT分区不能引导的解决方法
安装系统:CentOS 5.9_64bit时,分区后, 提示如下错误. 解决方法: 1.按ctrl+alt+F2 进入命令行 2.先查看分区 sh #fdisk -l 以下假设分区是/dev/s ...
- MySQL学习笔记九:存储过程,存储函数,触发器
存储过程 1.存储过程由一组特定功能的SQL语句组成,对于大型应用程序优势较大,相对不使用存储过程,具有以下优点: a.性能提高,因为存储过程是预编译的,只需编译一次,以后调用就不须再编译 b.重用性 ...