Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Problém s FormView.FindControl v ASP.NET

Zdravím všechny.

Začínám s ASP.NET v C#. Pracuji ve VS2013 Ultimate FW 4.5.
Vztvořil jsem aplikaci, ve které mám FormView s Labely. Tyto u těchto Labelů potřebuji upravovat vlastnosti, jako barvu textu v závislosti na textovém obsahu. Napčíklad "Vyhovuje" - zelená, "Nevyhovuje" - červená a pod.
Napsal jsem to takto:

if ((FormView1.FindControl("MeasGlobalStatusLabel") as Label).Text == "Vyhovuje")
            {
                (FormView1.FindControl("MeasGlobalStatusLabel") as Label).ForeColor = System.Drawing.Color.Green;
            }

            else if ((FormView1.FindControl("MeasGlobalStatusLabel") as Label).Text == "Nevyhovuje")
            {
                (FormView1.FindControl("MeasGlobalStatusLabel") as Label).ForeColor = System.Drawing.Color.Red;
            }

ale po spuštění mi server vyhodí chybu:

Odkaz na objekt není nastaven na instanci objektu.

Popis: Při provádění aktuálního webového požadavku došlo k neošetřené výjimce. Další informace o chybě a o jejím původu v kódu naleznete v trasování zásobníku.

Podrobnosti o výjimce: System.NullReferenceException: Odkaz na objekt není nastaven na instanci objektu.

Zdrojová chyba:

Řádek 14:
Řádek 15: Label lbl2 = new Label();
Řádek 16: lbl2.Text = (FormView1.FindControl("StatusLabel") as Label).Text;
Řádek 17: lbl2.BackColor = System.Drawing.Color.Red;
Řádek 18:

Zdrojový soubor: g:\C#\Programování\2013\Zkoska1\Zkoska1\Default.as px.cs Řádek: 16

Trasování zásobníku:

[NullReferenceException: Odkaz na objekt není nastaven na instanci objektu.]
Zkoska1._Default.Page_Load(Object sender, EventArgs e) in g:\C#\Programování\2013\Zkoska1\Zkoska1\Default.as px.cs:16
System.Web.Util.CalliEventHandlerDelegateProxy.Cal lback(Object sender, EventArgs e) +51
System.Web.UI.Control.OnLoad(EventArgs e) +92
System.Web.UI.Control.LoadRecursive() +54
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772

Můžete mi někdo poradit co s tím?

Děkuji za drahocenné rady.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Tak snad sám vidíš, že to hlásí chybu v jiné části kódu, než kterou jsi uvedl, ale nejspíš na formu…
Wikan 16.09.2014 12:56
Wikan
Díky za radu, ale server hlásí stejnou chybu.
Maros2470 17.09.2014 07:33
Maros2470
Tak snad sám vidíš, že to hlásí chybu v jiné části kódu, než kterou jsi uvedl Zbytek mého příspěvku…
Wikan 17.09.2014 08:56
Wikan
Já jsem tady omylem napsal hlášení z jiné aplikace, kterou jsem si udělal jako zkušební jestli náhod…
Maros2470 17.09.2014 09:56
Maros2470
- Bud si to spatne opsal, neo ti chybi na konci }
CoCoChanel 17.09.2014 10:18
CoCoChanel
Mám to napsáno takto: var statusLabel = FormView1.FindControl("MeasGlobalStatusLabel") as Label; sw…
Maros2470 17.09.2014 10:20
Maros2470
- c# neni moje silna sranka, ale zkousel jsi neco na zpusob IF, ELSE?: { case "Vyhovuje": statusLab…
CoCoChanel 17.09.2014 10:24
CoCoChanel
Tohle je nesmysl. Navíc v téhle části problém není.
Wikan 17.09.2014 10:36
Wikan
Ten Label tam je <td style="text-align:left; width: 10%"><span style="color: yellow; font-size:medi… nový
Maros2470 17.09.2014 10:48
Maros2470
var labelType = FormView1.FindControl("MeasGlobalStatusLabel").GetType(); var statusLabel = FormView… nový
Wikan 17.09.2014 10:53
Wikan
Jsem začátečník tak nerozumím tomu "breakpoint". nový
Maros2470 17.09.2014 15:16
Maros2470
http://msdn.microsoft.com/en-us/library/bb483011.a spx poslední
Wikan 17.09.2014 15:25
Wikan
Nemůže být chyba v tom, ve které události je ten k´d vložen? Já to mám v Page_Load. nový
Maros2470 17.09.2014 15:18
Maros2470

Tak snad sám vidíš, že to hlásí chybu v jiné části kódu, než kterou jsi uvedl, ale nejspíš na formu nemáš žádný "StatusLabel".
Dále provádět neustále stejné přetypování je docela ošklivé.

var statusLabel = FormView1.FindControl("MeasGlobalStatusLabel") as Label;
switch(statusLabel.Text)
{
    case "Vyhovuje":
        statusLabel.ForeColor = System.Drawing.Color.Green;
        break;
    case "Nevyhovuje":
        statusLabel.ForeColor = System.Drawing.Color.Red;
        break;
}

Ale to pomíjím, že rozhodovat se podle textu nějakého Labelu je hnus samo o sobě. Měl bys mít nějaký objekt, ve kterém budeš udržovat stav a podle toho se pak rozhodovat a vypisovat texty.

Já jsem tady omylem napsal hlášení z jiné aplikace, kterou jsem si udělal jako zkušební jestli náhodou nemám chybu v té ostré verzi, kde mám více stránek a tabulek. V té ostré to samozřejmě hlásí chybu v této části:

var statusLabel = FormView1.FindControl("MeasGlobalStatusLabel") as Label;
switch(statusLabel.Text)
{
    case "Vyhovuje":

Mám to napsáno takto:

var statusLabel = FormView1.FindControl("MeasGlobalStatusLabel") as Label;
switch(statusLabel.Text)
{
    case "Vyhovuje":
        statusLabel.ForeColor = System.Drawing.Color.Green;
        break;
    case "Nevyhovuje":
        statusLabel.ForeColor = System.Drawing.Color.Red;
        break;
}

v tom chybovém hlášení to uvedlo jen tu část kódu

- c# neni moje silna sranka, ale zkousel jsi neco na zpusob IF, ELSE?:

{
case "Vyhovuje":
statusLabel.ForeColor = System.Drawing.Color.Green;
break;
}
else
{
case "Nevyhovuje":
statusLabel.ForeColor = System.Drawing.Color.Red;
break;
}

Ten Label tam je

<td style="text-align:left; width: 10%"><span style="color: yellow; font-size:medium; text-align:left">Status revize:</span> </td>
                        <td style="border-color: white; background-color: white; border-bottom-style:inset; border-left-style:inset; border-top-style:inset; border-right-style:inset; text-align: left; width: 10%"><span style="color: black; font-size:large; text-align:right">
                            <asp:Label ID="MeasGlobalStatusLabel" runat="server" Text='<%# Bind("MeasGlobalStatus") %>' />
                            </span></td>

Zpět do poradny Odpovědět na původní otázku Nahoru