文档章节

asp.net如何实现高级搜索功能

crossmix
 crossmix
发布于 2015/11/30 16:19
字数 830
阅读 69
收藏 0

   开发搜索网站时,常常需要根据多个条件搜索一个指定结果。本实例在一个含有大量数据信息的搜索网站中实现了高级搜索功能。高级搜索主要通过复合条件查询来实现。运行本实例,程序将根据用户选择的信息类型和输入的信息名称在网站中进行搜索。另外,用户还可以指定一页中显示多少条记录。

图:


本例主要以asp.net网站为例,讲述如何运用SQL语句中的比较运算符。

为了方便用户使用SQL语句进行各种查询,在SQL语句中提供了几种常用的比较运算符,

图:

(1)新建一个网站,将其命名为HighSearch,默认主页为Default.aspx。

(2)Default.aspx页面用到的控件及用途

图:

(3)本实例主要用到了DataList控件分页技术。首先自定义一个dlDataBind()方法,该方法用来从数据库中查找出相关记录并计算出记录总数,然后对DataList控件进行数据绑定。该方法有4个参数:sqlstr、table、dkf和psize,它们分别表示要执行的SQL语句、数据表名、DataList控件要绑定的数据表主键和每页显示的记录数。

代码如下:

  1. public void dlDataBind(string sqlstr, 
    string table, string dkf, int psize)  
  2. {  
  3.  
  4.   int curpage = Convert.ToInt32(this.labPage.Text);  
  5.  
  6.   PagedDataSource ps = new PagedDataSource();  
  7.  
  8.   sqlconn.Open();  
  9.  
  10.   SqlDataAdapter MyAdapter = new SqlDataAdapter(sqlstr, sqlconn);  
  11.  
  12.   DataSet ds = new DataSet();  
  13.  
  14.   MyAdapter.Fill(ds, table);  
  15.  
  16.   ps.DataSource = ds.Tables[table].DefaultView;  
  17.  
  18.   ps.AllowPaging = true; //是否可以分页  
  19.  
  20.   ps.PageSize = psize; //显示的数量  
  21.  
  22.   ps.CurrentPageIndex = curpage - 1; //取得当前页的页码  
  23.  
  24.   this.lnkbtnUp.Enabled = true;  
  25.  
  26.   this.lnkbtnNext.Enabled = true;  
  27.  
  28.   this.lnkbtnBack.Enabled = true;  
  29.  
  30.   this.lnkbtnOne.Enabled = true;  
  31.  
  32.   if (curpage == 1)  
  33.  
  34.   {  
  35.  
  36.       this.lnkbtnOne.Enabled = false;//不显示第一页按钮  
  37.  
  38.       this.lnkbtnUp.Enabled = false;//不显示上一页按钮  
  39.  
  40.   }  
  41.  
  42.   if (curpage == ps.PageCount)  
  43.  
  44.   {  
  1.  
  2.       this.lnkbtnNext.Enabled = false;//不显示下一页  
  3.  
  4.       this.lnkbtnBack.Enabled = false;//不显示最后一页  
  5.  
  6.   }  
  7.  
  8.   this.labBackPage.Text = Convert.ToString(ps.PageCount);  
  9.  
  10.   this.dlInfo.DataSource = ps;  
  11.  
  12.   this.dlInfo.DataKeyField = dkf;  
  13.  
  14.   this.dlInfo.DataBind();  
  15.  
  16.   sqlconn.Close();  
二,实现高级搜索功能

dlDataBind()方法定义完成之后,还需要自定义一个dlInfoBind()方法来执行数据库查询操作,同时实现用户指定每页显示多少条记录的功能。

代码:

  1. public void dlInfoBind()  
  2. {  
  3.  
  4.   string sqlstr = "select * from tb_Info where 
    InfoName "
     + ddlISign.SelectedValue.Trim()  
  5.  
  6.   + " '%" + txtSKWord.Text.Trim() + "%' and 
    InfoType " + ddlSSign.SelectedValue.Trim()  
  7.  
  8.   + " '%" + ddlInfoType.SelectedValue.Trim() + "%'";  
  9.  
  10.   if (!sqloperate.comBind(sqlstr))  
  11.  
  12.   {  
  13.  
  14.       Response.Write("<script>alert('没有您要
    查询的结果,请重新输入')
    </script>");  
  15.  
  16.       Panel1.Visible = false;  
  17.  
  18.   }  
  19.  
  20.   else  
  21.  
  22.   {  
  23.  
  24.       if (ddlCount.SelectedValue == "1")  
  25.  
  26.       {  
  27.  
  28.       this.dlDataBind(sqlstr, "tb_Info", "InfoID", 1);  
  29.  
  30.       }  
  31.  
  32.       if (ddlCount.SelectedValue == "2")  
  33.  
  34.       {  
  35.  
  36.       this.dlDataBind(sqlstr, "tb_Info", "InfoID", 2);  
  37.  
  38.       }  
  39.  
  40.       if (ddlCount.SelectedValue == "3")  
  41.  
  42.       {  
  43.  
  44.       this.dlDataBind(sqlstr, "tb_Info", "InfoID", 3);  
  45.  
  46.       }  
  47.  
  48.       if (ddlCount.SelectedValue == "4")  
  49.  
  50.       {  
  51.  
  52.       this.dlDataBind(sqlstr, "tb_Info", "InfoID", 4);  
  53.  
  54.       }  
  55.  
  56.       if (ddlCount.SelectedValue == "5")  
  57.  
  58.       {  
  59.  
  60.       this.dlDataBind(sqlstr, "tb_Info", "InfoID", 5);  
  61.  
  62.       }  
  63.  
  64.       if (ddlCount.SelectedValue == "6")  
  65.  
  66.       {  
  67.  
  68.       this.dlDataBind(sqlstr, "tb_Info", "InfoID", 6);  
  69.  
  70.       }  
  71.  
  72.       if (ddlCount.SelectedValue == "7")  
  73.  
  74.       {  
  75.  
  76.       this.dlDataBind(sqlstr, "tb_Info", "InfoID", 7);  
  77.  
  78.       }  
  79.  
  80.       if (ddlCount.SelectedValue == "8")  
  81.  
  82.       {  
  83.  
  84.       this.dlDataBind(sqlstr, "tb_Info", "InfoID", 8);  
  85.  
  86.       }  
  87.  
  88.       if (ddlCount.SelectedValue == "9")  
  89.  
  90.       {  
  91.  
  92.       this.dlDataBind(sqlstr, "tb_Info", "InfoID", 9);  
  93.  
  94.       }  
  95.  
  96.       if (ddlCount.SelectedValue == "10")  
  97.  
  98.       {  

  
  
  1.  
  2.       this.dlDataBind(sqlstr, "tb_Info", "InfoID", 10);  
  3.  
  4.       }  
  5.  
  6.   }  

当用户单击"搜索"按钮时,程序调用dlInfoBind()方法进行数据信息检索操作。"搜索"按钮的Click事件代码如下:


  
  
  1. protected void btnSearch_Click(object sender, EventArgs e)  
  2. {  
  3.  
  4.   this.dlInfoBind( );  

心法领悟025:如何锁定Application对象。

由于Application对象属于网站的全局变量,因此经常会出现多人同时访问和修改对象的情况。为了避免两个会话同时修改Application对象,需要在修改前锁定Application对象,修改后再解锁Application对象。Application对象可以使用Lock()方法实现加锁功能,使用UnLock()方法实现解锁功能,相关代码如下:


  
  
  1. Application.Lock();//锁定Application对象  
  2. Application.UnLock();//解锁Application对象 
end。

adiOS

© 著作权归作者所有

共有 人打赏支持
crossmix
粉丝 66
博文 305
码字总数 645711
作品 0
广州
高级程序员
私信 提问
自学MVC看这里——全网最全ASP.NET MVC 教程汇总

MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC。小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口。本文从Why,W...

葡萄城控件技术团队
2016/08/18
204
0
高效界面开发:ASP.NET MVC GridView强悍的数据处理 | 附在线演示

DevExpress ASP.NET MVC下面有一个功能非常完善的GridView控件,它内置数据编辑器,数据加载速度超快,占用最小的内存资源,广泛的数据形成选项,还支持iOS、Android、Window Phone移动触摸。...

百mumu
2015/12/10
601
0
用DevExpress做界面开发:ASP.NET MVC GridView数据处理 | 附在线演示

DevExpress ASP.NET MVC下面有一个功能非常完善的GridView控件,它内置数据编辑器,数据加载速度超快,占用最小的内存资源,广泛的数据形成选项,还支持iOS、Android、Window Phone移动触摸。...

百mumu
2015/11/18
0
0
asp.net的Ajax学习进阶

asp.net的Ajax学习进阶 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.6.3 1.什么是Ajax? 2006年忽如一夜春风来,众多涉及到Web开发的站点都在谈Ajax,那么到底什么是Aja...

晨曦之光
2012/03/09
146
0
UI开发工具Telerik UI for ASP.NET AJAX发布R2 2018 SP1|附下载

Telerik的UI for ASP.NET AJAX拥有构建ASP.NET AJAX和SharePoint应用程序的80+控件,将为任何浏览器和设备构建Web Forms应用程序的时间缩短一半。Telerik UI for ASP.NET AJAX是完整的 ASP....

Miss_Hello_World
09/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
2
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
4
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0
Kernel I2C子系统

备注:所有图片来源于网络 1,I2C协议: 物理拓扑: I2C总线由两根信号线组成,一条是时钟信号线SCL,一条是数据信号线SDA。一条I2C总线可以接多个设备,每个设备都接入I2C总线的SCL和SDA。I...

yepanl
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部