如何从code动态添加Repeater控件的背后? [英] How to add Repeater control dynamically from code behind?

查看:120
本文介绍了如何从code动态添加Repeater控件的背后?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个创建表,然后之后创建一个中继器,表被渲染,但中继只是没有得到渲染的方法。下面先简单创建一个表,以信息填充它的方法,然后动态地构造,工作正常的中继器,但它只是不呈现中继到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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆