如何从code动态添加Repeater控件的背后? [英] How to add Repeater control dynamically from code behind?
问题描述
我有一个创建表,然后之后创建一个中继器,表被渲染,但中继只是没有得到渲染的方法。下面先简单创建一个表,以信息填充它的方法,然后动态地构造,工作正常的中继器,但它只是不呈现中继到aspx页面。我已经使用StringBuilder它返回一个字符串尝试,但仍然无法正常工作。这里是低于code。谢谢
私人无效CreateUserExperienceTable(列表< UserExperience>的经历)
{
的foreach(在经历UserExperience经验)
{
HtmlGenericControl标题=新HtmlGenericControl(H3);
Header.InnerHtml = experience.Company;
dvUserExperience.Controls.Add(头); 表experienceTable =新表(); 的TableRow experienceRoleRow =新的TableRow();
的TableRow experienceDescriptionRow =新的TableRow();
的TableRow experiencePeriodFromRow =新的TableRow();
的TableRow experiencePeriodToRow =新的TableRow(); TableCell的experienceRoleTitleCell =新的TableCell();
TableCell的experienceRoleValueCell =新的TableCell();
TableCell的experienceDescriptionTitleCell =新的TableCell();
TableCell的experienceDescriptionValueCell =新的TableCell();
TableCell的experiencePeriodFromTitleCell =新的TableCell();
TableCell的experiencePeriodFromValueCell =新的TableCell();
TableCell的experiencePeriodToTitleCell =新的TableCell();
TableCell的experiencePeriodToValueCell =新的TableCell(); experienceRoleTitleCell.Text =角色;
experienceRoleValueCell.Text = experience.Role;
experienceDescriptionTitleCell.Text =描述:
experienceDescriptionValueCell.Text = experience.CompanyDescription;
experiencePeriodFromTitleCell.Text =期间:从;
experiencePeriodFromValueCell.Text = experience.PeriodFrom.ToString(YY-MM-DD);
experiencePeriodToTitleCell.Text =期间;
experiencePeriodToValueCell.Text = experience.PeriodTo == NULL
? present
:experience.PeriodTo.ToString(); experienceRoleRow.Cells.Add(experienceRoleTitleCell);
experienceRoleRow.Cells.Add(experienceRoleValueCell);
experienceDescriptionRow.Cells.Add(experienceDescriptionTitleCell);
experienceDescriptionRow.Cells.Add(experienceDescriptionValueCell);
experiencePeriodFromRow.Cells.Add(experiencePeriodFromTitleCell);
experiencePeriodFromRow.Cells.Add(experiencePeriodFromValueCell);
experiencePeriodToRow.Cells.Add(experiencePeriodToTitleCell);
experiencePeriodToRow.Cells.Add(experiencePeriodToValueCell); experienceTable.Rows.Add(experienceRoleRow);
experienceTable.Rows.Add(experienceDescriptionRow);
experienceTable.Rows.Add(experiencePeriodFromRow);
experienceTable.Rows.Add(experiencePeriodToRow); dvUserExperience.Controls.Add(experienceTable); 字符串rptDuties = updatePageWithDuties(experience.Duties);
//dvUserExperience.Controls.Add(rptDuties);
}
} 私人字符串updatePageWithDuties(列表< ExperienceDuties>清单)
{
直放站rptDuties =新的Repeater();
rptDuties.DataSource =清单;
rptDuties.DataBind(); 的foreach(的RepeaterItem rptItem在rptDuties.Items)
{
如果(rptItem.ItemIndex == 0)
{
的RepeaterItem HeaderTemplate中=新的RepeaterItem(rptItem.ItemIndex,ListItemType.Header);
HtmlGenericControl h4Tag =新HtmlGenericControl(H4);
h4Tag.InnerHtml =义务;
headerTemplate.Controls.Add(h4Tag);
} 的RepeaterItem的ItemTemplate =新的RepeaterItem(rptItem.ItemIndex,ListItemType.Item);
标签dutyLabel =新的Label();
ExperienceDuties expDuties =((IList的&所述; ExperienceDuties&GT)rptDuties.DataSource)[rptItem.ItemIndex];
dutyLabel.Text = expDuties.Description;
itemTemplate.Controls.Add(dutyLabel); 的RepeaterItem seperatorItem =新的RepeaterItem(rptItem.ItemIndex,ListItemType.Separator);
LiteralControl ltrHR =新LiteralControl();
ltrHR.Text =<小时/>中;
seperatorItem.Controls.Add(ltrHR);
} StringBuilder的SB =新的StringBuilder();
StringWriter的SW =新的StringWriter(某人);
HtmlTextWriter的作家=新的HtmlTextWriter(SW); rptDuties.RenderControl(作家);
返回sb.ToString();
}
您不能呈现的转发控制作为一个字符串。相反,你需要在转发添加到 dvUserExperience 作为对照。
私人无效CreateUserExperienceTable(列表< UserExperience>的经历)
{
的foreach(在经历UserExperience经验)
{
... dvUserExperience.Controls.Add(experienceTable); //添加作为服务器控件
直放站rptDuties = updatePageWithDuties(experience.Duties);
dvUserExperience.Controls.Add(rptDuties);
}
}私人直放站updatePageWithDuties(列表< ExperienceDuties>清单)
{
直放站rptDuties =新的Repeater();
... 返回rptDuties;
}
更新:
您需要将控件添加到的RepeaterItem 是 rptItem 。
请参阅箭头< =====
在以下code
私人直放站updatePageWithDuties(列表< ExperienceDuties>清单)
{
直放站rptDuties =新的Repeater();
rptDuties.DataSource =清单;
rptDuties.DataBind(); 的foreach(的RepeaterItem rptItem在rptDuties.Items)
{
如果(rptItem.ItemIndex == 0)
{
VAR h4Tag =新HtmlGenericControl(H4);
h4Tag.InnerHtml =义务;
rptItem.Controls.Add(h4Tag); < =====
} VAR dutyLabel =新的Label();
ExperienceDuties expDuties =
((IList的< ExperienceDuties>)rptDuties.DataSource)rptItem.ItemIndex];
dutyLabel.Text = expDuties.Description;
rptItem.Controls.Add(dutyLabel); < ===== VAR ltrHR =新LiteralControl();
ltrHR.Text =<小时/>中;
rptItem.Controls.Add(ltrHR); < =====
} 返回rptDuties;
}
I have a method that creates table and then creates a repeater right after, the table gets rendered but the repeater just does not get rendered. The method below simply creates a table first, filling it with information then dynamically constructs a repeater which works fine, but then it just does not render the repeater onto the aspx page. I have tried using the stringbuilder to return it as a string but still doesn't work. here is the code below. Thanks
private void CreateUserExperienceTable(List<UserExperience> experiences)
{
foreach (UserExperience experience in experiences)
{
HtmlGenericControl Header = new HtmlGenericControl("h3");
Header.InnerHtml = experience.Company;
dvUserExperience.Controls.Add(Header);
Table experienceTable = new Table();
TableRow experienceRoleRow = new TableRow();
TableRow experienceDescriptionRow = new TableRow();
TableRow experiencePeriodFromRow = new TableRow();
TableRow experiencePeriodToRow = new TableRow();
TableCell experienceRoleTitleCell = new TableCell();
TableCell experienceRoleValueCell = new TableCell();
TableCell experienceDescriptionTitleCell = new TableCell();
TableCell experienceDescriptionValueCell = new TableCell();
TableCell experiencePeriodFromTitleCell = new TableCell();
TableCell experiencePeriodFromValueCell = new TableCell();
TableCell experiencePeriodToTitleCell = new TableCell();
TableCell experiencePeriodToValueCell = new TableCell();
experienceRoleTitleCell.Text = "Role:";
experienceRoleValueCell.Text = experience.Role;
experienceDescriptionTitleCell.Text = "Description:";
experienceDescriptionValueCell.Text = experience.CompanyDescription;
experiencePeriodFromTitleCell.Text = "Period From: ";
experiencePeriodFromValueCell.Text = experience.PeriodFrom.ToString("yy-mm-dd");
experiencePeriodToTitleCell.Text = "Period To:";
experiencePeriodToValueCell.Text = experience.PeriodTo == null
? "Present"
: experience.PeriodTo.ToString();
experienceRoleRow.Cells.Add(experienceRoleTitleCell);
experienceRoleRow.Cells.Add(experienceRoleValueCell);
experienceDescriptionRow.Cells.Add(experienceDescriptionTitleCell);
experienceDescriptionRow.Cells.Add(experienceDescriptionValueCell);
experiencePeriodFromRow.Cells.Add(experiencePeriodFromTitleCell);
experiencePeriodFromRow.Cells.Add(experiencePeriodFromValueCell);
experiencePeriodToRow.Cells.Add(experiencePeriodToTitleCell);
experiencePeriodToRow.Cells.Add(experiencePeriodToValueCell);
experienceTable.Rows.Add(experienceRoleRow);
experienceTable.Rows.Add(experienceDescriptionRow);
experienceTable.Rows.Add(experiencePeriodFromRow);
experienceTable.Rows.Add(experiencePeriodToRow);
dvUserExperience.Controls.Add(experienceTable);
String rptDuties = updatePageWithDuties(experience.Duties);
//dvUserExperience.Controls.Add(rptDuties);
}
}
private string updatePageWithDuties(List<ExperienceDuties> list)
{
Repeater rptDuties = new Repeater();
rptDuties.DataSource = list;
rptDuties.DataBind();
foreach (RepeaterItem rptItem in rptDuties.Items)
{
if (rptItem.ItemIndex == 0)
{
RepeaterItem headerTemplate = new RepeaterItem(rptItem.ItemIndex, ListItemType.Header);
HtmlGenericControl h4Tag = new HtmlGenericControl("h4");
h4Tag.InnerHtml = "Duties";
headerTemplate.Controls.Add(h4Tag);
}
RepeaterItem itemTemplate = new RepeaterItem(rptItem.ItemIndex, ListItemType.Item);
Label dutyLabel = new Label();
ExperienceDuties expDuties = ((IList<ExperienceDuties>)rptDuties.DataSource)[rptItem.ItemIndex];
dutyLabel.Text = expDuties.Description;
itemTemplate.Controls.Add(dutyLabel);
RepeaterItem seperatorItem = new RepeaterItem(rptItem.ItemIndex, ListItemType.Separator);
LiteralControl ltrHR = new LiteralControl();
ltrHR.Text = "<hr />";
seperatorItem.Controls.Add(ltrHR);
}
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter writer = new HtmlTextWriter(sw);
rptDuties.RenderControl(writer);
return sb.ToString();
}
You cannot render Repeater control as a string. Instead, you need to add the Repeater to dvUserExperience as a control.
private void CreateUserExperienceTable(List<UserExperience> experiences)
{
foreach (UserExperience experience in experiences)
{
...
dvUserExperience.Controls.Add(experienceTable);
// Add as a server control
Repeater rptDuties = updatePageWithDuties(experience.Duties);
dvUserExperience.Controls.Add(rptDuties);
}
}
private Repeater updatePageWithDuties(List<ExperienceDuties> list)
{
Repeater rptDuties = new Repeater();
...
return rptDuties;
}
Updated:
You need to add controls to RepeaterItem which is rptItem.
See the arrows <=====
in the following code.
private Repeater updatePageWithDuties(List<ExperienceDuties> list)
{
Repeater rptDuties = new Repeater();
rptDuties.DataSource = list;
rptDuties.DataBind();
foreach (RepeaterItem rptItem in rptDuties.Items)
{
if (rptItem.ItemIndex == 0)
{
var h4Tag = new HtmlGenericControl("h4");
h4Tag.InnerHtml = "Duties";
rptItem.Controls.Add(h4Tag); <=====
}
var dutyLabel = new Label();
ExperienceDuties expDuties =
((IList<ExperienceDuties>) rptDuties.DataSource)[rptItem.ItemIndex];
dutyLabel.Text = expDuties.Description;
rptItem.Controls.Add(dutyLabel); <=====
var ltrHR = new LiteralControl();
ltrHR.Text = "<hr />";
rptItem.Controls.Add(ltrHR); <=====
}
return rptDuties;
}
这篇关于如何从code动态添加Repeater控件的背后?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!