user105496
user105496

Reputation:

Update label C#

When the page first load i have a label who has 0 or 1. Look at the code and you will se what i trying to do. But it don't work because the page allready loaded.

protected void rptBugStatus_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Label lblName = e.Item.FindControl("lblBugStatus") as Label;
            if (lblName.Text == "1")
            {
                lblName.Text = lblName.Text + "Under arbete";
            }
            else if (lblName.Text == "0")
            {
                lblName.Text = "Fixad";
            }
            else { }
        }
    }

Upvotes: 1

Views: 1188

Answers (5)

tim
tim

Reputation: 547

Ok, I am taking the assumption you have set this label (assuming to be in the repeater, from your code) to have a value - I have tried databinding to something exactly the same, using the below code.

protected override void OnPreRender(EventArgs e)
{
    base.OnLoad(e);
    List<string> strList = new List<string>();
    strList.Add("1");
    rptBugStatus.DataSource = strList;
    rptBugStatus.DataBind();
}

protected void rptBugStatus_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Label lblBugStatus = e.Item.FindControl("lblBugStatus") as Label;
        // have added this just so we are actually setting the text property on the bug status
        // - i have assumed you do this.
        lblBugStatus.Text = e.Item.DataItem.ToString();

        if (lblBugStatus.Text.Equals("1"))
        {
            lblBugStatus.Text = lblBugStatus.Text + "Under arbete";
        }
        else if (lblBugStatus.Text.Equals("0"))
        {
            lblBugStatus.Text = "Fixad";
        }
    }
}

With the aspx being

    <asp:Repeater runat="server" ID="rptBugStatus" OnItemDataBound="rptBugStatus_ItemDataBound">

    <ItemTemplate>
        <asp:Label ID="lblBugStatus" runat="server"></asp:Label>
    </ItemTemplate>
    </asp:Repeater>

And I have no problems.

  • I get the below on the page.

1Under arbete

I think you are going to need to post more code if you have hidden any away from us :)

Tim

Upvotes: 0

Nathan Southerland
Nathan Southerland

Reputation: 126

You may have resolved this by now, but I think the problem with the code as you posted it is this:

Label lblName = e.Item.FindControl("lblBugStatus") as Label;

Because you are referencing a control in a repeater, the controls inside each repeater item are named dynamically based on their context. Most likely the name of the control is something like:

"rptBugStatus$repeaterItem0$lblBugStatus"

To find out the exact name, hard code a value, run the page in a browser, and look at the HTML output (via "View Source" in the browser menu). You should be able to scroll down and see your repeater (it will be rendered as a <table> tag), its items, and the controls living inside each item. The IDs/Names will be set and you can copy/paste them into your FindControl method.

Hope this helps,

Nate

Upvotes: 0

user105496
user105496

Reputation:

it's just work fine to fine the control. But i figure out another way to get out the data i want. That i'am going to is fix the xml structur better.

Upvotes: 0

Austin Salonen
Austin Salonen

Reputation: 50225

You really want to avoid this type of coding if at all possible. This will quickly grow into an unmaintainable web site.

Query the underlying data instead of GUI elements.

Upvotes: 1

Sadegh
Sadegh

Reputation: 6854

where you put your code? and be cautious e.Item.FindControl("lblBugStatus") as Label; may return null

Upvotes: 0

Related Questions