Skip to content

Instantly share code, notes, and snippets.

@brendanmckenzie
Created November 9, 2012 15:41
Show Gist options
  • Save brendanmckenzie/4046388 to your computer and use it in GitHub Desktop.
Save brendanmckenzie/4046388 to your computer and use it in GitHub Desktop.
public class TeamLeaderboard : Control, INamingContainer
{
#region Properties
const string ChangePageCommand = "ChangePage";
const string UpdatePanelID = "TeamLeaderboardUpdatePanel";
static Principal Principal { get { return HttpContext.Current.User as Principal; } }
const int PageSize = 25;
protected int PageNumber { get { return (int?)ViewState["page:number"] ?? 0; } set { ViewState["page:number"] = (int?)value; } }
HtmlTable _table;
UpdatePanel _updatePanel;
#endregion
protected override void CreateChildControls()
{
_updatePanel = new UpdatePanel();
_updatePanel.ID = UpdatePanelID;
var container = _updatePanel.ContentTemplateContainer.Controls;
_table = new HtmlTable();
container.Add(_table);
BuildTable(_table);
Controls.Clear();
Controls.Add(_updatePanel);
}
void PageButton_Click(object sender, CommandEventArgs e)
{
switch (e.CommandName)
{
case ChangePageCommand:
{
PageNumber = int.Parse((string)e.CommandArgument);
BuildTable(_table);
}
break;
}
}
void BuildTable(HtmlTable table)
{
table.Rows.Clear();
AddHeader(_table);
int pageCount;
var data = new SubEventBS().GetTeamLeaderboard(Principal, Principal.SubEventId, PageSize, PageNumber, out pageCount);
AddContent(_table, data);
AddFooter(_table, pageCount);
}
void AddHeader(HtmlTable table)
{
var row = new HtmlTableRow();
row.Cells.Add(new HtmlTableCell() { InnerText = "Team Name" });
row.Cells.Add(new HtmlTableCell() { InnerText = "Number of Team Members" });
row.Cells.Add(new HtmlTableCell() { InnerText = "Amount Raised" });
table.Rows.Add(row);
}
void AddFooter(HtmlTable table, int pageCount)
{
var row = new HtmlTableRow();
var cell = new HtmlTableCell() { ColSpan = 3 };
for (var i = 0; i < pageCount; i++)
{
var disp = (i + 1);
var button = new LinkButton() { Text = disp.ToString() };
button.CommandArgument = i.ToString();
button.CommandName = ChangePageCommand;
button.Command += PageButton_Click;
var space = new Literal() { Text = " " };
cell.Controls.Add(button);
cell.Controls.Add(space);
}
var loadingDisplay = new UpdateProgress();
loadingDisplay.Controls.Add(new Literal() { Text = "Loading..." });
loadingDisplay.AssociatedUpdatePanelID = UpdatePanelID;
cell.Controls.Add(loadingDisplay);
row.Cells.Add(cell);
table.Rows.Add(row);
}
void AddContent(HtmlTable table, DataSet data)
{
if (data.Tables.Count > 0)
{
foreach (DataRow dataRow in data.Tables[0].Rows)
{
var htmlRow = new HtmlTableRow();
htmlRow.Cells.Add(new HtmlTableCell() { InnerText = (string)dataRow["TeamName"] });
htmlRow.Cells.Add(new HtmlTableCell() { InnerText = ((int)dataRow["TeamSize"]).ToString("N0") });
htmlRow.Cells.Add(new HtmlTableCell() { InnerText = ((decimal)dataRow["TotalRaised"]).ToString("c") });
table.Rows.Add(htmlRow);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment