为了让大家对此程序有个整体了解,先请看一下程序的运行结果(如图1 所示),您可以在上半部分的查询条件对话控件中选择或输入任意条件(“%”代表全部数据),在下半部分的结果显示窗口中就会立刻显示出按照您的任意查询条件进行组合的模糊查询结果,效果很好。
图片看不清楚?请点击这里查看原图(大图)。
图1:程序运行结果示意图
下面介绍一下具体的实现过程:
一.准备程序所用的数据库及数据表
图2:主表zrzk表结构
为了简单且能说明问题,本实例中用的的Access数据库,库名为szgl.mdb,所包含的数据表为,zrzk(自然状况),zrzk表结构如图2所示,最好设计其字符字段的默认值全部为" "。将数据库szgl.mdb放在您所建网站的App_Data目录下(如本实例中就放在d:Lw3App_Data)。
二.设计过程
1.启动Visual Studio 2005,建立(或打开)您的网站,如示例中的Lw3,建立Web窗体文件Default.aspx文件;
2.在设计模式下,建立6个辅辅助数据源,它们分别是:AccessDataSource1-AccessDataSource6,其对照表如表1所示:
表1:数据源对应表
数据源 |
用途 |
SELECT语句 |
AccessDataSource1 |
系部 |
SELECT DISTINCT [所属系部] FROM [zrzk] |
AccessDataSource2 |
民族 |
SELECT DISTINCT [民族] FROM [zrzk] |
AccessDataSource3 |
技术职务 |
SELECT DISTINCT [技术职务], [zwbh] FROM [zrzk] ORDER BY [zwbh] |
AccessDataSource4 |
最后学历 |
|
AccessDataSource5 |
学位名称 |
SELECT DISTINCT [学位名称] FROM [zrzk] |
AccessDataSource6 |
性别 |
SELECT DISTINCT [性别] FROM [zrzk] |
3.在设计模式下,先建立一个一行一列的表格(为了叙述方便命名为T1),设定表格T1的属性为:width="800" border="1" cellspacing="0" cellpadding="0";单元格的属性为align="left" valign="top";
4.在建好的表格T1中插入一个Label控件Label1,其属性为:ID="Label1" runat="server" Font-Size="10pt" Text="请输入您的查询条件:" Width="796px" Height="18px" BackColor="WhiteSmoke";
5.在表格T1中,继续插入一个三行八列的表格(T2),使其位于Label1下方,T2的属性为:width="796" border="1" cellspacing="0" cellpadding="0",每一行中奇数列的宽度为64, bgcolor="whitesmoke";偶数列宽度为135,八列都设定两个共同的属性为align="left" valign="top";
6.按照图1上半部分的示例,分别拖拽12个Label控件、6个DropDownList控件、5个TextBox控件、1个RadioButtonList控件到指定位置,并调整好宽度使其看起来美观,例中设定TextBox控件的width="120",Label控件的width="48",其余类型控件的width="126",所有控件的字体设定为Font-Size="9pt";
特殊说明:
(1)6个DropDownList的属性说明如表2所示:
表2:DropDownList属性说明表
含义名称 |
ID |
DataSourceID |
DataValueFieldt DataValueField |
AutoPostBack |
系部 |
DropDownListXibu |
AccessDataSource1 |
所属系部 |
True |
民族 |
DropDownListMz |
AccessDataSource2 |
民族 |
True |
技术职务 |
DropDownListJszw |
AccessDataSource3 |
技术职务 |
True |
学历 |
DropDownListXl |
AccessDataSource4 |
学历 |
True |
学位名称 |
DropDownListXwmc |
AccessDataSource5 |
学位名称 |
True |
性别 |
DropDownListXb |
AccessDataSource6 |
性别 |
True |
(2)5个TextBox的ID属性分别为:
TextBoxXm,TextBoxJg,TextBoxCgsj, TextBoxByyx, TextBoxSxzy。其含义分别是:
姓名,籍贯,参工时间,毕业院校,所学专业;
(3)1个RadioButtonList的属性说明:
ID="RadioButtonListSfss" runat="server" AutoPostBack="True" CellPadding="0" CellSpacing="0" Font-Size="8pt" RepeatDirection="Horizontal" Width="126px";
(4)12个Label控件的Text属性分别如图1所示。
7.建立两个Button控件Button1、Button2并设定其Text属性分别为“显示查询结果”和“初始化查询条件”;
8.建立两个主数据源,AccessDataSource7,AccessDataSource8。配置数据源AccessDataSource7,使其的配结果为:
SELECT * FROM [zrzk] WHERE (([zwbh] LIKE '%' + ? + '%') AND ([毕业院校] LIKE '%' + ? + '%') AND ([参工时间] LIKE '%' + ? + '%') AND ([籍贯] LIKE '%' + ? + '%') AND ([民族] LIKE '%' + ? + '%') AND ([所学专业] LIKE '%' + ? + '%') AND ([所属系部] LIKE '%' + ? + '%') AND ([姓名] LIKE '%' + ? + '%') AND ([性别] LIKE '%' + ? + '%') AND ([学位名称] LIKE '%' + ? + '%') AND ([最后学历] LIKE '%' + ? + '%') AND ([是否是双师] = ?) AND ([姓名] <> ?)) ORDER BY [编号]。
说明:AccessDataSource7的where子句如图3所示,AccessDataSource8数据源是为了显示“RadioButtonListSfss”控件的“全部”选项而设定的,所以相对于AccessDataSource7而言,没有“是否是双师”项的where子句设定,其它同AccessDataSource7,不再赘述。
图3:AccessDataSource7的where子句
9.拖拽一个GridView控件到设计视图建立一个GridView1控件,并置GridView1的数据源为AccessDataSource8,通过编辑列操作将“zwbh”字段从GridView1控件中删除,设定GridView1的属性:AllowPaging="True" Font-Size="9pt" Width="800px"。
三.编写代码
(1) 编写Page_Init()事件代码;
(2)双击"RadioButtonListSfss"控件,编写RadioButtonListSfss_SelectedIndexChanged()事件代码;
(3)双击Button1控件,编写Button1_Click1()事件代码,双击Button2控件,编写Button2_Click1()事件代码;
四段代码分别如下:
protected void RadioButtonListSfss_SelectedIndexChanged(object sender, EventArgs e)
{
switch (Convert.ToString(RadioButtonListSfss.SelectedIndex))
{
case "0":
Session["Sfss"] = Convert.ToBoolean(-1);
this.GridView1.DataSourceID = "AccessDataSource7";
this.GridView1.DataBind();
break;
case "1":
Session["Sfss"] = Convert.ToBoolean(0);
this.GridView1.DataSourceID = "AccessDataSource7";
this.GridView1.DataBind();
break;
case "2":
this.GridView1.DataSourceID = "AccessDataSource8";
this.GridView1.DataBind();
break;
}
}
protected void Page_Init(object sender, EventArgs e)
{
TextBoxJg.Text = "%";
TextBoxXm.Text = "%";
TextBoxCgsj.Text = "%";
TextBoxByyx.Text = "%";
TextBoxSxzy.Text = "%";
RadioButtonListSfss.SelectedIndex = 2;
this.GridView1.DataSourceID = "AccessDataSource8";
}
protected void Button1_Click(object sender, EventArgs e)
{
GridView1.DataBind();
}
protected void Button2_Click1(object sender, EventArgs e)
{
TextBoxJg.Text = "%";
TextBoxXm.Text = "%";
TextBoxCgsj.Text = "%";
TextBoxByyx.Text = "%";
TextBoxSxzy.Text = "%";
RadioButtonListSfss.SelectedIndex = 2;
ListItem itmSelected11 = DropDownListXibu.Items.FindByValue("%");
if (itmSelected11 == null) DropDownListXibu.Items.Add("%");
DropDownListXibu.SelectedValue = "%";
ListItem itmSelected7 = DropDownListXb.Items.FindByValue("%");
if (itmSelected7 == null) DropDownListXb.Items.Add("%");
DropDownListXb.SelectedValue = "%";
ListItem itmSelected8 = DropDownListMz.Items.FindByValue("%");
if (itmSelected8 == null) DropDownListMz.Items.Add("%");
DropDownListMz.SelectedValue = "%";
ListItem itmSelected9 = DropDownListJszw.Items.FindByValue("%");
if (itmSelected9 == null) DropDownListJszw.Items.Add("%");
DropDownListJszw.SelectedValue = "%";
ListItem itmSelected10 = DropDownListZhxl.Items.FindByValue("%");
if (itmSelected10 == null) DropDownListZhxl.Items.Add("%");
DropDownListZhxl.SelectedValue = "%";
ListItem itmSelected12 = DropDownListXwmc.Items.FindByValue("%");
if (itmSelected12 == null) DropDownListXwmc.Items.Add("%");
DropDownListXwmc.SelectedValue = "%";
this.GridView1.DataSourceID = "AccessDataSource8";
}
四.结束语:本程序的突出特点是力求在最少的手工编码前提下完成一个动态模糊查询方式的实现过程。(该程序在IE浏览器上运行通过)
参考文献:
[1] 马军. 精通ASP.NET 2.0网络应用系统开发 人民邮电出版社
[2] 谢金荣 , 乔梁. ASP.NET数据绑定技术应用[J].电脑开发与应用,2007(5):74