Hello,
I use the following code to have a google like search of a MSSQL2008 database. MsSql 2008 now offers the Full text catalog indexed keywords in a queryable format. Using this list offers search suggestions like google. I retrieve the keywords, put them in App Cache and use it in the Itemsrequested event. I managed to mimic google by adding an itemtemplate to the radcombo, hiding the dropdown arrow, not expanding on ficus etc. But now I set the loading message to an empty string, but the loading bar will still be visible while typing. How can I hide this?
Here's my code. Based on the latest Q3 release. Net framework 3.5. I am posting all code because others might find it interesting. Not really neccesary for my question.
The webservice that queries the keyword index on MsSQL 2008 full text catalog (uses system stored procedure:
The stored procedure:
The aspx page with RadCombo as searchbox:
The code behind:
I use the following code to have a google like search of a MSSQL2008 database. MsSql 2008 now offers the Full text catalog indexed keywords in a queryable format. Using this list offers search suggestions like google. I retrieve the keywords, put them in App Cache and use it in the Itemsrequested event. I managed to mimic google by adding an itemtemplate to the radcombo, hiding the dropdown arrow, not expanding on ficus etc. But now I set the loading message to an empty string, but the loading bar will still be visible while typing. How can I hide this?
Here's my code. Based on the latest Q3 release. Net framework 3.5. I am posting all code because others might find it interesting. Not really neccesary for my question.
The webservice that queries the keyword index on MsSQL 2008 full text catalog (uses system stored procedure:
[WebMethod] |
public DataSet GetCatalogKeywords(string searchTerm) |
{ |
//Build the SqlCilent Objects we need |
SqlConnection conn = new SqlConnection("server=192.168.0.52; database=MyDatabase; User Id=sa; Password=MyPassword"); |
SqlCommand cmd = new SqlCommand(); |
//SqlDataAdapter to populate our DataSet |
SqlDataAdapter adapter = new SqlDataAdapter(); |
//DataSet to hold the users information |
DataSet dsInfo = new DataSet(); |
//String to hold our stored procedure |
const string query = "WebserviceKeySearch"; |
//try...catch block to handle any unhandeled exceptions |
try |
{ |
//set our SqlCommands Objects |
cmd.CommandText = query; |
cmd.CommandType = CommandType.StoredProcedure; //tell it its a Stored Procedure we're executing |
cmd.Parameters.AddWithValue("@searchTerm", searchTerm); |
cmd.Connection = conn; |
adapter.SelectCommand = cmd; |
//fill our DataSet |
//using the Fill Method of |
//the SqlDataAdapter |
adapter.Fill(dsInfo); |
//return the DataSet to the calling aspx page |
return dsInfo; |
} |
catch (Exception ex) |
{ |
System.Web.HttpContext.Current.Response.Write(ex.Message); |
return null; |
} |
finally |
{ |
} |
} |
The stored procedure:
SELECT distinct display_term, sum(document_count) AS HitCount
FROM
sys.dm_fts_index_keywords
(DB_ID('Hezelbase'), OBJECT_ID('Regeling')) where display_term like @searchTerm + '%' group by display_term order by display_term
|
The aspx page with RadCombo as searchbox:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %> |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head runat="server"> |
<title></title> |
<telerik:RadStyleSheetManager ID="RadStyleSheetManager1" runat="server" /> |
</head> |
<body> |
<form id="form1" runat="server"> |
<telerik:RadScriptManager ID="RadScriptManager1" runat="server"> |
<Scripts> |
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" /> |
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" /> |
</Scripts> |
</telerik:RadScriptManager> |
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> |
</telerik:RadAjaxManager> |
<telerik:RadScriptBlock ID="rsbc" runat="server"> |
</telerik:RadScriptBlock> |
<div> |
<telerik:RadAjaxPanel runat="server" ID="RadAjaxPanel1"> |
<telerik:RadComboBox ID="RadComboBox1" runat="server" Width="330px" Height="150px" DropDownWidth="420px" |
EmptyMessage="Zoeken..." EnableLoadOnDemand="True" ShowMoreResultsBox="false" HighlightTemplatedItems="true" ShowDropDownOnTextboxClick="false" |
ShowToggleImage="false" ShowWhileLoading="false" AccessibilityMode="true" CloseDropDownOnBlur="true" LoadingMessage="" |
OpenDropDownOnLoad="false" EnableVirtualScrolling="false" OnItemsRequested="RadComboBox1_ItemsRequested"> |
<ItemTemplate> |
<table style="width: 325px" cellspacing="0" cellpadding="0"> |
<tr> |
<td style="width: 200px;"> |
<%# DataBinder.Eval(Container, "Text")%> |
</td> |
<td style="width: 100px; color:Green;"> |
<%# DataBinder.Eval(Container, "Attributes['HitCount']")%> |
</td> |
</tr> |
</table> |
</ItemTemplate> |
</telerik:RadComboBox> |
</telerik:RadAjaxPanel> |
</div> |
</form> |
</body> |
</html> |
The code behind:
using System; |
using System.Data; |
using HezelbaseWebService; |
using Telerik.Web.UI; |
public partial class Default : System.Web.UI.Page |
{ |
protected void Page_Load(object sender, EventArgs e) |
{ |
} |
private void fillCahceFromService() |
{ |
Service1 s = new Service1(); |
DataSet ds = s.GetCatalogKeywords("%"); |
Cache["Webservicedata"] = ds; |
} |
protected void RadComboBox1_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e) |
{ |
RadComboBox combo = (RadComboBox)o; |
if(Cache["Webservicedata"] == null || Cache["Webservicedata"].GetType() != typeof(DataSet)) |
{ |
fillCahceFromService(); |
} |
if (e.Text.Length > 1) |
{ |
DataSet ds = (DataSet)Cache["Webservicedata"]; |
if (ds != null && ds.Tables.Count > 0) |
{ |
DataRow[] dataRows = ds.Tables[0].Select("display_term like '" + e.Text + "%'"); |
foreach (DataRow dataRow in dataRows) |
{ |
RadComboBoxItem item = new RadComboBoxItem(); |
string HitCount = dataRow["HitCount"].ToString(); |
item.Text = (string)dataRow["display_term"]; |
item.Attributes.Add("HitCount", HitCount + " results"); |
combo.Items.Add(item); |
item.DataBind(); |
} |
} |
} |
} |
} |