本人上班闲着无聊,偶遇些网站仿效Google和百度的搜索,.使搜索的关键字显红色,觉得挺牛的,于是抽了些时间自己弄了一个,供广大asp.net爱好者参考.
首先创建类库 Model (业务实体层),创建类: NewDina.CS 用于获取数据库相应字段名,
Demo如下:
public
class
NewDina
{
Fields
Public Properties
}
{
Fields
Public Properties
}
然后再创建一个类:DinaSet.CS该列用于将搜索的关键字放入数组,用于替换关键字用,令搜索的关键字显红色;
Demo如下:
public
class
DinaSet
{
private ArrayList dinarray = new ArrayList();
public ArrayList Dinarray
{
get
{
return dinarray;
}
}
}
{
private ArrayList dinarray = new ArrayList();
public ArrayList Dinarray
{
get
{
return dinarray;
}
}
}
类创建好之后就是界面设计了,
Demo如下:
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
< head runat ="server" >
< title > 无标题页 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< asp:TextBox ID ="txt" runat ="server" ></ asp:TextBox >
< asp:Button ID ="btnSearch" runat ="server" Text ="搜 索" onclick ="btnSearch_Click" />< br />
< asp:DataList ID ="dlData" runat ="server" Height ="158px" Width ="100%" >
< HeaderTemplate >
< table border ="0" cellpadding ="0" cellspacing ="0" width ="100%" style ="height:100%" >
< tr >
< td > 标题 </ td >
< td > 内容 </ td >
< td > 时间 </ td >
</ tr >
</ HeaderTemplate >
< ItemTemplate >
< tr >
< td colspan ="3" ></ td >
</ tr >
< tr >
< td style ="width:200px" > <% # Eval("news_Title") %> </ td >
< td > <% # Eval("news_Content") %> </ td >
< td > <% # Eval("news_Time") %> </ td >
</ tr >
</ ItemTemplate >
< FooterTemplate >
</ table >
</ FooterTemplate >
</ asp:DataList >
</ div >
</ form >
</ body >
</ html >
< head runat ="server" >
< title > 无标题页 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< asp:TextBox ID ="txt" runat ="server" ></ asp:TextBox >
< asp:Button ID ="btnSearch" runat ="server" Text ="搜 索" onclick ="btnSearch_Click" />< br />
< asp:DataList ID ="dlData" runat ="server" Height ="158px" Width ="100%" >
< HeaderTemplate >
< table border ="0" cellpadding ="0" cellspacing ="0" width ="100%" style ="height:100%" >
< tr >
< td > 标题 </ td >
< td > 内容 </ td >
< td > 时间 </ td >
</ tr >
</ HeaderTemplate >
< ItemTemplate >
< tr >
< td colspan ="3" ></ td >
</ tr >
< tr >
< td style ="width:200px" > <% # Eval("news_Title") %> </ td >
< td > <% # Eval("news_Content") %> </ td >
< td > <% # Eval("news_Time") %> </ td >
</ tr >
</ ItemTemplate >
< FooterTemplate >
</ table >
</ FooterTemplate >
</ asp:DataList >
</ div >
</ form >
</ body >
</ html >
后台代码如下:
public
string
keyword_sousuo(
string
table_field,
string
keyword)
{
string str01="", str02="", keyword_Words;
string[] keywords, table_fields;
table_fields = table_field.Split(',');
keywords = keyword.Split(',');
if (table_field != "")
{
str01 = "(" + table_fields[0].ToString() + " like '%" + keyword + "%'" + ")";
for (int i = 0; i < table_fields.Length; i++)
{
str01 = str01 + " or " + table_fields[i].ToString() + " like '%" + keyword + "%'";
}
//str01 = str01 + ")";
}
else
{
Response.Write("<script>alert('参数错误(不能为空)!')</script>");
}
keyword = keyword.Replace(" ", " ");
keywords = keyword.Split(' ');
if (keywords.Length > 0)
{
for (int i = 0; i < keywords.Length; i++)
{
str02 = str02 + " or " + table_fields[0].ToString() + " like '%" + keywords[i].ToString() + "%'";
for (int j = 1; j < table_fields.Length; j++)
{
str02 = str02 + " or " + table_fields[j] + " like '%" + keywords[i].ToString() + "%'";
}
//str02 = str02 + ")";
}
//str02 = "(" + str02.Replace(")(", ")and(") + ")";
keyword_Words = "(" + str01 +" "+ str02 + ")";
}
else
{
keyword_Words = str01;
}
return keyword_Words;
}
public string keyword_tag( string str, string keyword)
{
string str01, str02;
string[] keywords;
string keyword_tag = "";
keyword = keyword.Replace(" ", " ");
str01 = str.Replace(keyword,"<font color="#ff0000">"+keyword+"</font>");
keywords=keyword.Split(' ');
if (keywords.Length > 0)
{
str02 = str;
for (int i = 0; i < keywords.Length; i++)
{
str02 = str02.Replace(keywords[i], "<font color="#ff0000">" + keywords[i] + "</font>");
}
keyword_tag = str02;
}
else
{
keyword_tag = str01;
}
return keyword_tag;
}
protected void btnSearch_Click( object sender, EventArgs e)
{
string keyword = txt.Text;
string sql_where = keyword_sousuo("news_Title,news_Content,news_Time",keyword);
string strconn = "server=;User ID=sa;Password=123456;database=r;";
SqlConnection conn = new SqlConnection(strconn);
conn.Open();
string strsql = "select news_Title,news_Content,news_Time from CMgr_NewsDiary where " + sql_where + "order by news_Id";
SqlDataAdapter sda = new SqlDataAdapter(strsql,conn);
DataSet ds = new DataSet();
sda.Fill(ds);
DataTable dt = ds.Tables[0];
ModelData.DinaSet nds = new ModelData.DinaSet();
foreach(DataRow dr in dt.Rows)
{
ModelData.NewDina nda = new ModelData.NewDina();
nda.news_Title =keyword_tag( dr["news_Title"].ToString(),txt.Text);
nda.news_Content =keyword_tag( dr["news_Content"].ToString(),txt.Text);
nda.news_Time =keyword_tag(dr["news_Time"].ToString(),txt.Text);
nds.Dinarray.Add(nda);
}
dlData.DataSource = nds.Dinarray;
dlData.DataBind();
conn.Close();
}
{
string str01="", str02="", keyword_Words;
string[] keywords, table_fields;
table_fields = table_field.Split(',');
keywords = keyword.Split(',');
if (table_field != "")
{
str01 = "(" + table_fields[0].ToString() + " like '%" + keyword + "%'" + ")";
for (int i = 0; i < table_fields.Length; i++)
{
str01 = str01 + " or " + table_fields[i].ToString() + " like '%" + keyword + "%'";
}
//str01 = str01 + ")";
}
else
{
Response.Write("<script>alert('参数错误(不能为空)!')</script>");
}
keyword = keyword.Replace(" ", " ");
keywords = keyword.Split(' ');
if (keywords.Length > 0)
{
for (int i = 0; i < keywords.Length; i++)
{
str02 = str02 + " or " + table_fields[0].ToString() + " like '%" + keywords[i].ToString() + "%'";
for (int j = 1; j < table_fields.Length; j++)
{
str02 = str02 + " or " + table_fields[j] + " like '%" + keywords[i].ToString() + "%'";
}
//str02 = str02 + ")";
}
//str02 = "(" + str02.Replace(")(", ")and(") + ")";
keyword_Words = "(" + str01 +" "+ str02 + ")";
}
else
{
keyword_Words = str01;
}
return keyword_Words;
}
public string keyword_tag( string str, string keyword)
{
string str01, str02;
string[] keywords;
string keyword_tag = "";
keyword = keyword.Replace(" ", " ");
str01 = str.Replace(keyword,"<font color="#ff0000">"+keyword+"</font>");
keywords=keyword.Split(' ');
if (keywords.Length > 0)
{
str02 = str;
for (int i = 0; i < keywords.Length; i++)
{
str02 = str02.Replace(keywords[i], "<font color="#ff0000">" + keywords[i] + "</font>");
}
keyword_tag = str02;
}
else
{
keyword_tag = str01;
}
return keyword_tag;
}
protected void btnSearch_Click( object sender, EventArgs e)
{
string keyword = txt.Text;
string sql_where = keyword_sousuo("news_Title,news_Content,news_Time",keyword);
string strconn = "server=;User ID=sa;Password=123456;database=r;";
SqlConnection conn = new SqlConnection(strconn);
conn.Open();
string strsql = "select news_Title,news_Content,news_Time from CMgr_NewsDiary where " + sql_where + "order by news_Id";
SqlDataAdapter sda = new SqlDataAdapter(strsql,conn);
DataSet ds = new DataSet();
sda.Fill(ds);
DataTable dt = ds.Tables[0];
ModelData.DinaSet nds = new ModelData.DinaSet();
foreach(DataRow dr in dt.Rows)
{
ModelData.NewDina nda = new ModelData.NewDina();
nda.news_Title =keyword_tag( dr["news_Title"].ToString(),txt.Text);
nda.news_Content =keyword_tag( dr["news_Content"].ToString(),txt.Text);
nda.news_Time =keyword_tag(dr["news_Time"].ToString(),txt.Text);
nds.Dinarray.Add(nda);
}
dlData.DataSource = nds.Dinarray;
dlData.DataBind();
conn.Close();
}
其中keyword_sousuo(string table_field, string keyword)方法的作用是返回条件查询语句的条件字符.
keyword_tag(string str,string keyword)方法的作用是将返回的结果数据中响应关键字进行替换,令查询的关键字显红色.若霖湛圆