private void PopulateItemList(int start, int count)
{
ItemList.Controls.Clear();
ItemList.ColumnNames.Clear();
ItemList.ColumnNames.Add("Icon", "Icon");
var columnNames = new HashSet<string>();
foreach (DisplayElement result in Current.Context.Report.GetResultElements(start - 1, count))
{
var lvi = new ListviewItem
{
ID = Control.GetUniqueID("lvi"),
Icon = result.Icon,
Value = result.Value
};
foreach (string column in result.GetColumnNames())
{
columnNames.Add(column);
lvi.ColumnValues.Add(column, result.GetColumnValue(column));
}
ItemList.Controls.Add(lvi);
}
foreach (string column in columnNames)
{
ItemList.ColumnNames.Add(column, column);
}
Status.Text = string.Format("{0} results found.", Current.Context.Report.ResultsCount());
var noPages =
(int) Math.Ceiling((decimal) Current.Context.Report.ResultsCount()/Current.Context.Settings.PageSize);
ItemList.CurrentPage = (int) Math.Ceiling((decimal) start/Current.Context.Settings.PageSize);
int startpage = noPages > Current.Context.Settings.MaxNumberPages &&
ItemList.CurrentPage > Current.Context.Settings.MaxNumberPages/2
? ItemList.CurrentPage - Current.Context.Settings.MaxNumberPages/2
: 1;
int endpage = Math.Min(startpage + Current.Context.Settings.MaxNumberPages, noPages);
const string separator = " ";
if (noPages > 0)
{
var sb = new StringBuilder(" Page ");
if (startpage > 1)
{
int newpage = Math.Max(1, startpage - Current.Context.Settings.MaxNumberPages);
if (newpage > 1)
{
var b = new LinkButton {Header = "first", Click = "changepage:" + 1};
sb.Append(b.RenderAsText());
}
var lb = new LinkButton {Header = "...", Click = "changepage:" + newpage};
sb.Append(lb.RenderAsText());
}
for (int i = startpage; i <= endpage; i++)
{
var b = new LinkButton
{Header = i.ToString(CultureInfo.InvariantCulture), Selected = i == ItemList.CurrentPage, Click = "changepage:" + i};
b.Style.Add(HtmlTextWriterStyle.Cursor, "pointer");
sb.Append(b.RenderAsText());
sb.Append(separator);
}
if (endpage < noPages)
{
int newpage = Math.Min(noPages, endpage + Current.Context.Settings.MaxNumberPages/2);
var b = new LinkButton {Header = "...", Click = "changepage:" + newpage};
sb.Append(b.RenderAsText());
if (newpage < noPages)
{
b = new LinkButton {Header = "last", Click = "changepage:" + noPages};
sb.Append(b.RenderAsText());
}
}
Status.Text += sb.ToString();
Status.Style.Add(HtmlTextWriterStyle.Cursor, "default");
}
Sitecore.Context.ClientPage.ClientResponse.Refresh(ItemList);
Sitecore.Context.ClientPage.ClientResponse.Refresh(Status);
}