How to develop a custom SharePoint search webpart


This sample SharePoint webpart is meant to do search using search web service and result the result and show it on SPGridView.


create a new class library in visual studio and paste the below code.


using System;


using System.Data;


using System.Reflection;


using System.Runtime.InteropServices;


using System.Text;


using System.Web;


using System.Web.UI;


using System.Web.UI.HtmlControls;


using System.Web.UI.WebControls;


using System.Web.UI.WebControls.WebParts;


using System.Xml.Serialization;


using Microsoft.SharePoint;


using Microsoft.SharePoint.WebControls;


using Microsoft.SharePoint.WebPartPages;


using Microsoft.Office.Server.Search;


using Microsoft.Office.Server.Search.WebControls;


using System.IO;


using Microsoft.Office.Server.Search.Query;


using System.Globalization;


 


namespace SampleGridViewTest


{


    public class ErrorTrap


    {


        public void LogTheMessage(string myMessage)


        {


            using (StreamWriter sw = new StreamWriter("C:\\error.txt"))


            {


                sw.Write(myMessage.ToString());


            }


        }


    }


 


    [Guid("7586970D-0EE6-446b-875F-CFE71052C171")]


    public class SampleGridViewClass : Microsoft.SharePoint.WebPartPages.WebPart


    {


        SPGridView GridView1 = new SPGridView();


        ObjectDataSource DataSource1 = new ObjectDataSource();


        Button Submit = new Button();


        TextBox Search = new TextBox();


 


 


        public static DataTable FillDataTable(string SearchText)


        {


            try


            {


                if (SearchText != null)


                {


                    StringBuilder query = new StringBuilder();


                    query.Append("<QueryPacket xmlns='urn:Microsoft.Search.Query'>");


                    query.Append("<Query><SupportedFormats><Format revision='1'>urn:Microsoft.Search.Response.Document:Document</Format></SupportedFormats>");


                    query.Append("<Context><QueryText language='en-US' type=\"MSSQLFT\">");


                    query.Append("SELECT Size, Rank, HitHighLightedSummary, Path, Title, author, Description, Write FROM scope()");


                    query.Append("WHERE (\"SCOPE\" = 'TCS') AND FREETEXT(DEFAULTPROPERTIES,'" + SearchText.ToString() + "')");


                    query.Append("ORDER BY Rank desc</QueryText></Context><Range><StartAt>1</StartAt><Count>5000</Count></Range><TrimDuplicates>false</TrimDuplicates><IgnoreAllNoiseQuery>false</IgnoreAllNoiseQuery><IncludeRelevantResults>true</IncludeRelevantResults><IncludeHighConfidenceResults>false</IncludeHighConfidenceResults><EnableStemming>false</EnableStemming></Query></QueryPacket>");


 


                    QueryWebService.QueryService queryService = new QueryWebService.QueryService();


                    queryService.Url = "http://testserver1:7045/_vti_bin/search.asmx";


                    queryService.PreAuthenticate = true;


                    queryService.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;


 


                    System.Data.DataSet queryResults = queryService.QueryEx(query.ToString());


 


                    return queryResults.Tables[0];


                }


                else


                {


                    return null;


                }


            }


            catch (Exception ex)


            {


                ErrorTrap e = new ErrorTrap();


                e.LogTheMessage("FillDataTable" + ex.Message + Environment.NewLine + ex.StackTrace.ToString());


                return null;


            }


        }


 


        public void Submit_Click(object sender, EventArgs e)


        {


            try


            {


                Parameter p = new Parameter("SearchText", DbType.String, Search.Text);


                DataSource1.SelectParameters["SearchText"] = p;


                GridView1.DataBind();


            }


            catch (Exception ex)


            {


                ErrorTrap f = new ErrorTrap();


                f.LogTheMessage("SubmitClick" + ex.Message + Environment.NewLine + ex.StackTrace.ToString());


            }


        }


 


        public void CreateGrid()


        {


            if (Page.IsPostBack == true)


            {


                GridView1 = new SPGridView();


                GridView1.AutoGenerateColumns = false;


                GridView1.PageSize = 10;


                GridView1.AllowPaging = true;


                GridView1.PagerStyle.HorizontalAlign = HorizontalAlign.Center;


                GridView1.PageIndexChanging += new GridViewPageEventHandler(GridView1_PageIndexChanging);


 


 


                CreateGridViewColumns("Size");


                CreateGridViewColumns("Rank");


                CreateGridViewColumns("HitHighLightedSummary");


                CreateGridViewColumns("Path");


                CreateGridViewColumns("Title");


                CreateGridViewColumns("author");


                CreateGridViewColumns("Description");


                CreateGridViewColumns("Write");


 


                DataSource1 = new ObjectDataSource();


               


 


                string strTypeName = "SampleGridViewTest,";


                strTypeName += Assembly.GetExecutingAssembly().FullName;


 


                DataSource1.TypeName = String.Format("{0},{1}", this.GetType().FullName, Assembly.GetExecutingAssembly().FullName);


                DataSource1.SelectMethod = "FillDataTable";


                DataSource1.SelectParameters.Add("SearchText", "");


                DataSource1.SelectParameters["SearchText"].Direction = ParameterDirection.Input;


                DataSource1.ID = "MyDataSource";


 


                Controls.Add(DataSource1);


                GridView1.DataSourceID = DataSource1.ID;


 


                Controls.Add(GridView1);


                GridView1.PagerTemplate = null;


 


            }


        }


 


        protected override void CreateChildControls()


        {


            Submit = new Button();


            Submit.Text = "Search";


            Submit.Click += new EventHandler(Submit_Click);


            Controls.Add(Submit);


 


            Search = new TextBox();


            Search.Text = "";


            Controls.Add(Search);


 


            CreateGrid();


            base.CreateChildControls();


        }


 


        protected override void RenderWebPart(HtmlTextWriter output)


        {


            base.RenderWebPart(output);


        }


 


        private void CreateGridViewColumns(string strColumn)


        {


            BoundField oGridColumn = new BoundField();


            oGridColumn.DataField = strColumn;


            oGridColumn.HeaderText = strColumn;


            oGridColumn.Visible = true;


            GridView1.Columns.Add(oGridColumn);


        }


 


        void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)


        {


            GridView1.PageIndex = e.NewPageIndex;


        }


    }


}

Skip to main content