文档章节

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

crossmix
 crossmix
发布于 2015/11/30 16:19
字数 830
阅读 118
收藏 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
粉丝 72
博文 305
码字总数 645711
作品 0
广州
高级程序员
私信 提问
自学MVC看这里——全网最全ASP.NET MVC 教程汇总

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

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

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

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

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

百mumu
2015/11/18
848
0
.net界面开发:ASP.NET MVC GridView强悍的数据处理

轻松操作30万条数据 DevExpress ASP.NET MVC Grid View支持一种特别针对处理大型数据集的绑定模式,运用这种绑定模式,数据感知操作(排序、分组等)可以在数据库服务器端执行。 这个Demo就展...

子非鱼_505266
09/29
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
162
0

没有更多内容

加载失败,请刷新页面

加载更多

链表中环的入口节点

给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路: public ListNode EntryNodeOfLoop(ListNode pHead) { if (pHead == null || pHead.next == null) ...

Garphy
11分钟前
2
0
Spring5 源码分析-容器刷新-invokeBeanFactoryPostProcessors()方法

上一篇:Spring5 源码分析-容器刷新-prepareBeanFactory()方法 该方法主要完成以下功能: 1.实例化ConfigurationClassPostProcessor,并调用ConfigurationClassPostProcessor.postProcessBe...

特拉仔
11分钟前
3
0
为什么MySQL用B+树做索引

索引这个词,相信大多数人已经相当熟悉了,很多人都知道MySQL的索引主要以B+树为主,但是要问到为什么用B+树,恐怕很少有人能把前因后果讲述的很完整。本文就来从头到尾介绍下数据库的索引。...

小致Daddy
36分钟前
4
0
网站前台的三级联动数据封装

我在进行项目时候遇到了一个进行数据封装的一个功能,进行数据的封装的功能也挺复杂,来回试了好几十种方法.最后使用的是这种方法. 使用一个pojo进行封装两个数据,一个是list一个是实体类. 具体...

小天丶羽
39分钟前
4
0
创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA的SPI FLASH、硬件加密芯片

TL437xF-EVM是一款广州创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA设计的开发板,底板采用沉金无铅工艺的4层板设计,尺寸为240mm*130mm,它为用户提供了SOM-TL437xF核心板的测...

Tronlong创龙
41分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部