Render() 方法基本上控制着 WebControl 的整个输出。默认情况下,Render() 方法实际上会依次调用 RenderBeginTag()、RenderContents() 以及 RenderEndTag()。
RenderContents 方法以呈现开始和结束标记之间的控件内容。
CreateChildControls方法和AddAttributesToRender的区别:
AddAttributesToRender方法:只是添加客户端HTML Tag的属性而已,如颜色、单击事件。
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "alert('Test');");
base.AddAttributesToRender(writer);
CreateChildControls方法:生成子控件,如一个WebControl里有个属性为Collection,那这个属性就可以用子控件。
---------------------------
protected override void Render(HtmlTextWriter output)
{
CreateChildControls();
base.Render(output);
}
protected override void CreateChildControls()
{
Controls.Clear();
ClearChildViewState();
this.BuildControlHierarchy();
}
private void BuildControlHierarchy()
{
Table table = new Table();
table.BorderStyle = BorderStyle.None;
table.Width = Unit.Parse("620px");
table.Height = Unit.Parse("25px");
TableRow row = new TableRow();
table.Rows.Add(row);
TableCell cellBar = new TableCell();
BuildPagerUI(cellBar);
row.Controls.Add(cellBar);
Controls.Add(table);
}
private void BuildPagerUI(TableCell cell)
{
bool isValidPage = (PageIndex >=0 && PageIndex <= PageCount-1);
bool canMoveBack = (PageIndex >0);
bool canMoveForward = (PageIndex < PageCount-1);
//添加首页按钮
LinkButton first = new LinkButton();
first.ID = "first";
first.Click += new EventHandler(first_Click);
first.Text = "首页";
first.Enabled = isValidPage && canMoveBack;
cell.Controls.Add(first);
cell.Controls.Add(new LiteralControl(" "));
//添加上一页按钮
LinkButton prev = new LinkButton();
prev.ID = "Prev";
prev.Click += new EventHandler(prev_Click);
prev.Text = "上一页";
prev.Enabled = isValidPage && canMoveBack;
cell.Controls.Add(prev);
cell.Controls.Add(new LiteralControl(" "));
//添加下一页按钮
LinkButton next = new LinkButton();
next.ID = "Next";
next.Click += new EventHandler(next_Click);
next.Text = "下一页";
next.Enabled = isValidPage && canMoveForward;
cell.Controls.Add(next);
cell.Controls.Add(new LiteralControl(" "));
//添加末页按钮
LinkButton last = new LinkButton();
last.ID = "Last";
last.Click += new EventHandler(last_Click);
last.Text = "末页";
last.Enabled = isValidPage && canMoveForward;
cell.Controls.Add(last);
cell.Controls.Add(new LiteralControl(" "));
//添加当前页和总页码
Label lbl = new Label();
lbl.ID = "label";
lbl.Text = "页次:" + (this.PageIndex + 1).ToString() + "/" + this.PageCount.ToString() + " 页" + " " + this.PageSize.ToString() + "条记录/页 共" + this.TotalCount.ToString() + "条记录 跳转到>>";
cell.Controls.Add(lbl);
cell.Controls.Add(new LiteralControl(" "));
//添加页码
DropDownList pageList = new DropDownList();
pageList.ID = "PageList";
pageList.AutoPostBack = true;
pageList.SelectedIndexChanged += new EventHandler(PageList_Click);
if (PageCount <=0 || PageIndex == -1)
{
pageList.Items.Add("No Pages");
pageList.Enabled = false;
pageList.SelectedIndex = 0;
}
else
{
for(int i=1; i<=PageCount; i++)
{
ListItem item = new ListItem(i.ToString(), (i-1).ToString());
pageList.Items.Add(item);
}
pageList.SelectedIndex = PageIndex;
}
cell.Controls.Add(pageList);
}