
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.
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é.
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.
Díky za radu, ale server hlásí stejnou chybu.
Zbytek mého příspěvku se týkal uvedené části kódu, ale znovu opakuji, že to není ta část, kde je problém.
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:
- Bud si to spatne opsal, neo ti chybi na konci }
Mám to napsáno takto:
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?:
Tohle je nesmysl. Navíc v téhle části problém není.
Ten Label tam je
Přidej si tam ten vrchní řádek a na spodní dej breakpoint, co bude po spuštění v labelType?
Jsem začátečník tak nerozumím tomu "breakpoint".
http://msdn.microsoft.com/en-us/library/bb483011.a spx