How to add Repeater control dynamically from code behind?

ife labolz

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();
    }
Win

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;
}

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

How to call javascript from code behind for Repeater control

From Dev

How to add html li control dynamically in repeater

From Dev

How to Fill Repeater ItemTemplate from Code Behind?

From Dev

How to add a control from code-behind in a DIV

From Dev

Add extra repeater item or loop from the code behind

From Dev

Get a value from Repeater in code-behind

From Dev

How to dynamically add Id to a Textbox and retrive it in code behind in webforms

From Dev

how can i change the repeater's label value from code behind

From Dev

How to dynamically add server controls into repeater?

From Dev

How to dynamically make a JSON object from code behind in c#

From Dev

How to set a google map url dynamically from code behind

From Dev

how to access a control within Data Template from code behind?

From Dev

How to control the visibility from code behind VB.NET

From Dev

How to access UI control from code-behind of ResourceDictionary

From Dev

Give asp:hyperlink in a repeater a url from code behind

From Dev

How to refresh Repeater control from client side

From Dev

How to get Footer Item value on code behind with nested Repeater?

From Dev

How to get Reference to the label in repeater item in code behind

From Dev

How to dynamically bind asp.net repeater control to datasource

From Dev

How to dynamically bind asp.net repeater control to datasource

From Dev

Populating RadMenu Dynamically from Code Behind

From Dev

Reach Html control from Code-behind

From Dev

Reach Html control from Code-behind

From Dev

How to set DataContext of a single control to code the behind

From Dev

How to access a control templace in code behind?

From Dev

How can I add more than custom control using code behind?

From Dev

How to add textbox or label in aspx repeater control by using if statement?

From Dev

How to set the data of WinJS.UI.Repeater control in JS code?

From Dev

Control dynamic Custom Control Properties from code-behind

Related Related

  1. 1

    How to call javascript from code behind for Repeater control

  2. 2

    How to add html li control dynamically in repeater

  3. 3

    How to Fill Repeater ItemTemplate from Code Behind?

  4. 4

    How to add a control from code-behind in a DIV

  5. 5

    Add extra repeater item or loop from the code behind

  6. 6

    Get a value from Repeater in code-behind

  7. 7

    How to dynamically add Id to a Textbox and retrive it in code behind in webforms

  8. 8

    how can i change the repeater's label value from code behind

  9. 9

    How to dynamically add server controls into repeater?

  10. 10

    How to dynamically make a JSON object from code behind in c#

  11. 11

    How to set a google map url dynamically from code behind

  12. 12

    how to access a control within Data Template from code behind?

  13. 13

    How to control the visibility from code behind VB.NET

  14. 14

    How to access UI control from code-behind of ResourceDictionary

  15. 15

    Give asp:hyperlink in a repeater a url from code behind

  16. 16

    How to refresh Repeater control from client side

  17. 17

    How to get Footer Item value on code behind with nested Repeater?

  18. 18

    How to get Reference to the label in repeater item in code behind

  19. 19

    How to dynamically bind asp.net repeater control to datasource

  20. 20

    How to dynamically bind asp.net repeater control to datasource

  21. 21

    Populating RadMenu Dynamically from Code Behind

  22. 22

    Reach Html control from Code-behind

  23. 23

    Reach Html control from Code-behind

  24. 24

    How to set DataContext of a single control to code the behind

  25. 25

    How to access a control templace in code behind?

  26. 26

    How can I add more than custom control using code behind?

  27. 27

    How to add textbox or label in aspx repeater control by using if statement?

  28. 28

    How to set the data of WinJS.UI.Repeater control in JS code?

  29. 29

    Control dynamic Custom Control Properties from code-behind

HotTag

Archive