As I said in my earlier post I was working and trying some stuff related to SharePoint 2013 search server. Today I was trying to query and display search results in SPGrid view. I have uploaded my solution package in my drive; Please download and look for the code if you need. (Download)
I used certain blog posts as references.
Solution
Create a web part (I have created visual web part). On the .ascx page initiate a SPGridView. (For that you can use the below code)
On the ascx.cs page do the blow
On page load
protected void Page_Load(object sender, EventArgs e)
{
string query = string.Format("Project*"); //You can give what ever query you need
ExecuteFederatedQuery(query);
}
void ExecuteFederatedQuery(string queryText)
{
long lastupdate;
bool crawl;
//Create Search service proxy
SearchServiceApplicationProxy proxy = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy
(SPServiceContext.GetContext(SPContext.Current.Site));
LocationConfiguration locationConfig = null;
LocationConfiguration[] locationConfigurations = proxy.GetLocationConfigurations(out lastupdate, out crawl);//Get all federated search locations.
Location location;
LocationList locationList = new LocationList();
QueryManager queryManager = new QueryManager();
foreach (LocationConfiguration locationConfiguration in locationConfigurations)
{
//Specify any federated search location. Here default search location will be captured.
if (locationConfiguration.InternalName.Equals("LocalSearchIndex"))
{
locationConfig = locationConfiguration;
break;
}
}
location = new Location(locationConfig.InternalName, proxy);
//Set the userQuery
location.UserQuery = queryText;
locationList.Add(location);
queryManager.Add(locationList);
queryManager.IsTriggered(locationList);
XmlDocument xDoc = queryManager.GetResults(locationList);//Return the query
if (xDoc != null)
{
DataSet resultSet = new DataSet();
resultSet.ReadXml(new XmlNodeReader(xDoc));
SortData(resultSet.Tables[1]);
}
}
private void SortData(DataTable resultTable)
{
//Sort the results by Title name
DataView dataView = resultTable.DefaultView;
dataView.Sort = "Title ASC";
DataTable resuDataTable = dataView.ToTable();
var fileTable = new DataTable();
DataRow fileRow;
fileTable.Columns.Add("Title");
fileTable.Columns.Add("Modified_Date");
fileTable.Columns.Add("Authors");
fileTable.Columns.Add("DocURL");
foreach (DataRow resultRow in resuDataTable.Rows)
{
fileRow = fileTable.NewRow();
fileRow["Title"] = resultRow["title"];
fileRow["DocURL"] = resultRow["url"];
fileRow["Modified_Date"] = resultRow["lastmodifiedtime"];
fileRow["Authors"] = resultRow["author"];
fileTable.Rows.Add(fileRow);
}
//Assign the datasource
spGridView.DataSource = fileTable;
spGridView.DataBind();
}
Conclusion
The results will look something like this.
very useful, thanks
ReplyDeleteYou are welcome :)
Deleteuseful 1...
ReplyDeleteThnx :)
Delete