I am trying to enclose SPGridView inside an UpdatePanel control in a
user control page (.ascx), however whenever I click on the paging links
for the grid, it still postbacks instead of partial page rendering.
Also, this is not the first time I have used ajax in my project. I have
taken the same code that has worked on other controls and applied them
to the SPGridvew with no success. Below is a sample of the user control
page in question with my override childcontrols. Any thoughts?
protected override void CreateChildControls()
{
// Register the AJAX ScriptManager
ScriptManager ajaxScriptManager = ScriptManager.GetCurrent(this.Page);
if (ajaxScriptManager == null)
{
ajaxScriptManager = new ScriptManager();
ajaxScriptManager.ID = "AJAXScriptManager";
ajaxScriptManager.EnablePartialRendering = true;
this.Controls.Add(ajaxScriptManager);
}
EnsureAJAXUpdatePanelCompatibility();
ajaxUpdatePanel = new UpdatePanel();
ajaxUpdatePanel.ID = "AJAXUpdatePanel";
ajaxUpdatePanel.ChildrenAsTriggers = true;
ajaxUpdatePanel.UpdateMode = UpdatePanelUpdateMode.Conditional;
this.Controls.Add(ajaxUpdatePanel);
currentSite = SPContext.Current.Web;
using (ListCaml listCaml = new ListCaml(currentSite))
{
searchID = ((SearchLibraryResultsPage)this.Page).searchID;
searchResultInfo = SearchProcessController.GetSearchResultInfo(searchID);
using (Fields fields = new Fields())
{
searchResultsInfoArray = fields.CreateStringValueArray(searchResultInfo);
}
elapsedTime = Convert.ToDouble(searchResultsInfoArray[0]);
setNumber = Convert.ToInt16(searchResultsInfoArray[1]);
rowStart = Convert.ToInt16(searchResultsInfoArray[2]);
rowCount = Convert.ToInt16(searchResultsInfoArray[3]);
isNextSet = Convert.ToBoolean(searchResultsInfoArray[4]);
sortManagedProperty = searchResultsInfoArray[5];
sortDirection = searchResultsInfoArray
;
searchResultsDT = (DataTable)Cache["SearchResults_" + searchID.ToString()];
searchCriteriaDT = (DataTable)Cache["SearchCriteria_" + searchID.ToString()];
gridView = new SPGridView();
searchResultsDV = new DataView(searchResultsDT);
gridView.DataSource = searchResultsDV;
//CreateViewColumnMenu();
searchCriteria = new StringBuilder();
foreach (DataRow libraryFieldsDR in searchCriteriaDT.Rows)
{
if (libraryFieldsDR["Value"].ToString() != string.Empty)
{
CreateSearchCriteriaList(libraryFieldsDR["Column_Name"].ToString(), libraryFieldsDR["Literal_Operator"].ToString(),
libraryFieldsDR["Data_Type"].ToString(),libraryFieldsDR["Value"].ToString());
}
if (libraryFieldsDR["Column_Name"].ToString() != "Path")
{
SPBoundField boundField = new SPBoundField();
boundField.HeaderText = libraryFieldsDR["Column_Name"].ToString();
boundField.DataField = libraryFieldsDR["Managed_Property"].ToString();
boundField.SortExpression = libraryFieldsDR["Managed_Property"].ToString();
gridView.Columns.Add(boundField);
}
}
gridView.AutoGenerateColumns = false;
gridView.AllowSorting = true;
gridView.AllowPaging = true;
gridView.PagerSettings.Position = PagerPosition.Top;
gridView.PagerSettings.Mode = PagerButtons.NumericFirstLast;
gridView.PagerSettings.PageButtonCount = 5;
gridView.PageSize = listCaml.GetSearchResultLimits(Convert.ToInt16(Session["Current_LibraryID"]), SharePointSearch.resultsPerPage);
gridView.Sorting += new GridViewSortEventHandler(gridView_Sorting);
gridView.PageIndexChanging += new GridViewPageEventHandler(gridView_PageIndexChanging);
ajaxUpdatePanel.ContentTemplateContainer.Controls.Add(gridView);
//PagerTemplate must be added after you added the control, but before you bind your data
gridView.PagerTemplate = null;
gridView.DataBind();
//AddResultsInformation();
//Preserves the sorting when page is reload
if ((!Page.IsPostBack) && (sortManagedProperty != string.Empty) && (sortDirection != string.Empty))
{
ViewState["SortExpression"] = sortManagedProperty;
ViewState["SortDirection"] = sortDirection;
AddSortColumnArrows(gridView.HeaderRow,sortManagedProperty, sortDirection);
gridView.DataBind();
}
}
}