Diskuze: Formátování záznamu v ASP.NET

C# .NET .NET (C# a Visual Basic) Formátování záznamu v ASP.NET American English version English version

Avatar
Maros2470
Člen
Avatar
Maros2470:

Zdravím. Potřeboval bych poradit jak naformátovat vzhled zobrazovaných dat (pokud to lze). Například datum se zobrazuje i s časem a potřebuji jen datum.

U statusu bych potřeboval měnit barvu textu v závislosti na znění textu, např.: Vyhovuje - zelená, Nevyhovuje - červená.

U data v závislosti na datu. Je li zobrazené datum vyšší než systémové datum - červená, jeli menší - zelená.

K zobrazení dat používám FormView. Jednotlivé položky mám napsány takto:

<span style="color: yellow; font-size:medium; text-align:left">Datum registrace:</span>
            <span style="color: whitesmoke; font-size:large; text-align:right"<asp:Label ID="TakenIntoEvidenceLabel" runat="server" Text='<%# Bind("TakenIntoEvidence") %>' /></span>

Díky za cenné rady

Editováno 15.9.2014 12:10
 
Odpovědět 15.9.2014 12:09
Avatar
Michal Štěpánek:

Barvu statusu bych řešil pomocí css uděláš si tam třídu vyhovuje a dáš jí vlastnosti. Pak jen ve stránce dáš formát pomocí

class="proměnná_status"

Datum se formátuje např. takto:

<asp:Label ID="JizdaDatumLabel" runat="server" Font-Bold="true" Text='<%# Bind("JizdaDatum", "{0:D}") %>' />

se zobrazí dlouhé datum. Když dáš malé "d" místo velkého, zobrazí se datum krátké. Při použití "t" se zobrazí čas...
A barvu datumu bych řešil v kódu, pomocí "If" a "Else"

Editováno 15.9.2014 12:29
Nahoru Odpovědět 15.9.2014 12:26
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

Mrkni se na videotutoriály na http://mstv.cz , vyber si "vývojáři", kategorii zvol "asp.net", tam se dozvíš spoustu těchto základních věcí pro tvorbu webů v ASP.NET...

Nahoru Odpovědět 15.9.2014 12:34
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Barvu bych taky řešil v kódu a to jak u data, tak i u statusu, ale nevím jak si vytáhnout jednotlivé hodnoty z FormView. Ony tam jsou sice ID Labelů, ale v kódu tyto Labely nejsou vidět. Takže jsem na mrtvém bodě. Aplikaci mám téměř hotovou, teď už jen to formátování Labelů.

 
Nahoru Odpovědět 15.9.2014 15:56
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Pomohlo by mi také dostat data do Labelu, tam už bych si s tím poradil, ale data mi nejdou navázat na Label.

 
Nahoru Odpovědět 15.9.2014 17:02
Avatar
Michal Štěpánek:

Data do Labelů se "Bindují"

<asp:Label ID="TakenIntoEvidenceLabel" runat="server" Text='<%# Bind("TakenIntoEvidence") %>' />

a v kódu se dostaneš např na Label, který má ID="TakenInto­EvidenceLabel" ve FormView1, tak, že ho prohledáš

(FormView1.FindControl("TakenIntoEvidenceLabel") As Label).Text
Nahoru Odpovědět 15.9.2014 18:31
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Asi už dneska blbnu. Můžeš mi ten předchozí kód napsat jako podmínku: Když text = něco tak ForeColor = green.

Díky moc. Už mi to nemyslí a chtěl bych tuto část dodělat. Od zítřka makám a nebudu mít na to čas.

 
Nahoru Odpovědět 15.9.2014 19:01
Avatar
Michal Štěpánek:
If ((FormView1.FindControl("TakenIntoEvidenceLabel") As Label).Text = "něco")
{
(FormView1.FindControl("TakenIntoEvidenceLabel") As Label).ForeColor = Green;
}
Else If ((FormView1.FindControl("TakenIntoEvidenceLabel") As Label).Text = "něcojinýho")
{
(FormView1.FindControl("TakenIntoEvidenceLabel") As Label).ForeColor = Red;
}
Else
{
co se má stát, když neprojde ani jedna podmínka
}
Editováno 15.9.2014 19:54
Nahoru Odpovědět 15.9.2014 19:51
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

tak jinak, to předchozí jsem si vyzkoušel a nejde...

if ((FormView1.FindControl("jmenoLabel") as Label).Text == "pepík")
{
  (FormView1.FindControl("jmenoLabel") as Label).ForeColor = System.Drawing.Color.Green;
}

tohle jde...

Editováno 15.9.2014 20:05
Nahoru Odpovědět 15.9.2014 20:04
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Díky, ale tak to jsem měl napsáno (v podmínce, ale ==). Háže mi to chybu v zadání barvy. To mě právě zmátlo. ForeColor = Barva nelze zadat.

 
Nahoru Odpovědět 15.9.2014 20:08
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Tohle je ono!!!. Díky moc!!!

 
Nahoru Odpovědět 15.9.2014 20:19
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Opět chyba. server hlásí:

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.NullRe­ferenceExcepti­on: Odkaz na objekt není nastaven na instanci objektu.

Zdrojová chyba:

Řádek 13: {
Řádek 14:
Řádek 15: if((FormView1­.FindControl("Me­asGlobalStatus­Label") as Label).Text == "Vyhovuje")
Řádek 16: {
Řádek 17: (FormView1.Fin­dControl("Meas­GlobalStatusLa­bel") as Label).ForeColor = System.Drawin­g.Color.Green;

Zdrojový soubor: g:\C#\Programo­vání\2013\eli_e­lektro\eli_elek­tro\Spotr\Spo­trebicDetail.as­px.cs Řádek: 15

Trasování zásobníku:

[NullReference­Exception: Odkaz na objekt není nastaven na instanci objektu.]
eli_elektro.Spo­tr.SpotrebicDe­tail.Page_Load(Ob­ject sender, EventArgs e) in g:\C#\Programo­vání\2013\eli_e­lektro\eli_elek­tro\Spotr\Spo­trebicDetail.as­px.cs:15
System.Web.Util­.CalliEventHan­dlerDelegatePro­xy.Callback(Ob­ject sender, EventArgs e) +51
System.Web.UI­.Control.OnLo­ad(EventArgs e) +92
System.Web.UI­.Control.Load­Recursive() +54
System.Web.UI­.Page.ProcessRe­questMain(Boo­lean includeStages­BeforeAsyncPo­int, Boolean includeStagesAf­terAsyncPoint) +772

 
Nahoru Odpovědět 15.9.2014 20:23
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

Když se načítá stránka, jaký Template FormView se ti načítá? Nemáš ty Labely náhodou v Template, který po načtení stránky není aktivní? Tomu by ta chyba odpovídala...

Nahoru Odpovědět 15.9.2014 20:38
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
 
Nahoru Odpovědět 15.9.2014 20:41
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

A po načtení stránky je ItemTemplate aktivní?
A bez toho ifu se ti do stránky data načtou správně?

Editováno 15.9.2014 20:52
Nahoru Odpovědět 15.9.2014 20:51
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Přesně tak. Data vidím normálně. Pokud tam není ta podmínka. Dá se to nějak převést do jiného Item? Mám tam ještě dva, ale ty nejsou vidět a jsou v nich textboxy. EditItem a InsertItem. Ve vlastostech je nastavení ItemType, nebude zrada tam?

Editováno 15.9.2014 20:59
 
Nahoru Odpovědět 15.9.2014 20:58
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

Zkus si do toho FormView vložit ručně nějaký Label a v kódu mu zkus přidat nějaké vlastnosti, jestli to bude fungovat.
Ještě mě napadlo, skutečně má ten label ID=MeasGlobal­StatusLabel?

Nahoru Odpovědět 15.9.2014 21:02
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

ID je v pořádku a přidaný Lebel funguje s prostým textem i s daty, ale ještě něco zkusím

Editováno 15.9.2014 21:13
 
Nahoru Odpovědět 15.9.2014 21:12
Avatar
Maros2470
Člen
Avatar
Maros2470:

Když přidám Label do FormView a dám ručně text - funguje.
Když přidám Label do FormView a zadám data - funguje.
Když přidám Label na stránku v kódu je vidět.
Když přidám Label do FormView v kódu není vidět a hlásí stejnou chybu

Editováno 15.9.2014 21:32
 
Nahoru Odpovědět 15.9.2014 21:29
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

a při jaké události to v tom kódu voláš?

Nahoru Odpovědět 15.9.2014 22:45
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

protected void Page_Load(object sender, EventArgs e)

už jsem nad tím také uvažoval, jestli není chyba tady.

Editováno 15.9.2014 22:50
 
Nahoru Odpovědět 15.9.2014 22:48
Avatar
Michal Štěpánek:

tak už jsem z toho srnec, daněk, jelen...

Nahoru Odpovědět 15.9.2014 22:50
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Já taky, už jsem snad vyzkoušel všechno. Když jsi to zkoušel, tobě to chodilo?

 
Nahoru Odpovědět 15.9.2014 22:51
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Zkusím ten FormView udělat znovu

 
Nahoru Odpovědět 15.9.2014 22:54
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

Když je nějaký prvek ve FormView, tak v kódu být vidět nemůže a dostat se k němu lze jen přes "FindControl".
Zkusil jsi tomu ručně přidanému Labelu do FormView nastavit z kódu nějaký text?
Pokud to nefunguje, pak mě už napadá jediné - zrušit tu stránku a založit ji znovu od začátku...
Mě to přes FindControl funguje normálně.

Nahoru Odpovědět 15.9.2014 22:56
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Maros2470:

To jsem zkoušel a fungovalo to

 
Nahoru Odpovědět 15.9.2014 22:59
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Dneska už na to kašli. Zítra snad budeme moudřejší. Každopádně díky.

 
Nahoru Odpovědět 15.9.2014 23:05
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

Ještě mě napadlo, jestli tam máš odchyceny všechny možnosti "textů", které se mohou vyskytnout v tom labelu. Mohlo by to být tím, že podmínce nevyhovuje nic a vyhodí to chybu..., to ale už 'vařím z vody'...
Teď jsem to zkoušel a normálně mi to funguje, text se v labelu ve FormView barví, jak potřebuju...

Nahoru Odpovědět 15.9.2014 23:21
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Maros2470:

Zkusil jsem i ListView a je to to samé, mám i novou stránku

 
Nahoru Odpovědět 15.9.2014 23:25
Avatar
Maros2470
Člen
Avatar
Maros2470:

Je otázka zda mám dobře nastavený View

 
Nahoru Odpovědět 15.9.2014 23:27
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

Zruš tu stránku celou a založ jí znovu od začátku..., to musí fungovat. 8-)

Nahoru Odpovědět 16.9.2014 7:27
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Jenom mně napadlo. V jaké verzi VS to děláš? Já mám VS 2013 Ultimate, tedy FW 4.5.1.
Nemůže to být rozdílnými knihovnami FW?

 
Nahoru Odpovědět 16.9.2014 7:31
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Upravil jsem FW na 4.5. Chybu nevyhazuje, ale taky nebarví.

 
Nahoru Odpovědět 16.9.2014 7:48
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

Já dělám ve VS2013 Express for WEB (FW 4.5)

Nahoru Odpovědět 16.9.2014 8:27
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Udělal jsem úplně novou aplikaci s jednou stránkou a problém je stejný. Faktu už nevím.

 
Nahoru Odpovědět 16.9.2014 10:31
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:

Zkoušel jsem to i takhle a nic. Stejná chyba.

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;
}
 
Nahoru Odpovědět 17.9.2014 15:25
Avatar
coells
Redaktor
Avatar
Odpovídá na Maros2470
coells:
var statusLabel = FindControl<Label>(FormView1, "MeasGlobalStatusLabel");

        private static T FindControl<T>(Control control, string id) where T : Control
        {
            if (control == null)
                return null;

            if (control.ID == id)
                return (T)control;

            return control.Controls.OfType<Control>().Select(c => FindControl<T>(c, id)).Where(c => c != null).FirstOrDefault();
        }
Editováno 17.9.2014 16:25
 
Nahoru Odpovědět 17.9.2014 16:25
Avatar
Maros2470
Člen
Avatar
Odpovídá na coells
Maros2470:

Zdravím. Mám to napsáno takto:

public partial class SpotrebicDetail : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var statusLabel = FindControl<Label>(FormView1, "MeasGlobalStatusLabel");

            statusLabel.Text = "Ahoj";




        }

        private static T FindControl<T>(Control control, string id) where T : Control
        {
            if (control == null)
                return null;

            if (control.ID == id)
                return (T)control;

            return control.Controls.OfType<Control>().Select(c => FindControl<T>(c, id)).Where(c => c != null).FirstOrDefault();




        }

, ale vyhazuje to pořád 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.NullRe­ferenceExcepti­on: Odkaz na objekt není nastaven na instanci objektu.

Zdrojová chyba:

Řádek 17: var statusLabel = FindControl<La­bel>(FormView1, "MeasGlobalSta­tusLabel");
Řádek 18:
Řádek 19: statusLabel.Text = "Ahoj";
Řádek 20:
Řádek 21:

Zdrojový soubor: g:\C#\Programo­vání\2013\eli_e­lektro\eli_elek­tro\Spotr\Spo­trebicDetail.as­px.cs Řádek: 19

Trasování zásobníku:

[NullReference­Exception: Odkaz na objekt není nastaven na instanci objektu.]
eli_elektro.Spo­tr.SpotrebicDe­tail.Page_Load(Ob­ject sender, EventArgs e) in g:\C#\Programo­vání\2013\eli_e­lektro\eli_elek­tro\Spotr\Spo­trebicDetail.as­px.cs:19
System.Web.Util­.CalliEventHan­dlerDelegatePro­xy.Callback(Ob­ject sender, EventArgs e) +51
System.Web.UI­.Control.OnLo­ad(EventArgs e) +92
System.Web.UI­.Control.Load­Recursive() +54
System.Web.UI­.Page.ProcessRe­questMain(Boo­lean includeStages­BeforeAsyncPo­int, Boolean includeStagesAf­terAsyncPoint) +772

Ta chyba je v tom statusLabel.Text = "Ahoj"; To ahoj je tam jen zkušebně

Editováno 17.9.2014 19:12
 
Nahoru Odpovědět 17.9.2014 19:10
Avatar
coells
Redaktor
Avatar
Odpovídá na Maros2470
coells:

V tom případě ve formuláři není control s takovým ID.

 
Nahoru Odpovědět 17.9.2014 19:26
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

a když to napíšeš takhle

(FormView1.FindControl("MeasGlobalStatusLabel") as Label).Text = "Ahoj"

tak to taky nejde?

Nahoru Odpovědět 17.9.2014 19:38
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Odpovídá na coells
Maros2470:

Právě, že je:

<span style="color: black; font-size:large; text-align:right"><asp:Label ID="MeasGlobalStatusLabel" runat="server" Text='<%# Bind("MeasGlobalStatus") %>' /></span>

                        </td>
 
Nahoru Odpovědět 17.9.2014 19:46
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

a bez toho "spanu" jsi to zkoušel, jestli se něco změní? Protože jestli tam ten span máš jen kvůli stylování toho labelu, tak to můžeš udělat přímo do "toho" labelu...

Editováno 17.9.2014 19:52
Nahoru Odpovědět 17.9.2014 19:51
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
coells
Redaktor
Avatar
Odpovídá na Maros2470
coells:

A já tvrdím, že tam není. Můžeme nad tím bádat, můžeme nad tím diskutovat, ale jednoduše tam není.

Pokud máš label definovaný ve FormView.Item­Template, tak se nevygeneruje, dokud do FormView nenavážeš data.

Takže jsou následující možnosti:

  1. snažíš se dostat na label příliš brzo (netuším, jak binduješ datasource), což zjistíš tak, že se podíváš do vygenerovaného html a najdeš tam span id="mainconten­t_formview1_Me­asGlobalStatus­Label"
  2. žádný takový element tam nenajdeš, tím pádem máš špatný datasource
  3. přečti si nějakou knihu o ASP.NET, ušetříš si tím tunu času
 
Nahoru Odpovědět 17.9.2014 21:09
Avatar
Maros2470
Člen
Avatar
Odpovídá na coells
Maros2470:

V tom html to je: MeasGlobalStatus:
<span id="MainConten­t_FormView1_Me­asGlobalStatus­Label">Vyhovu­je </span>

Na ten Label odkazuji v události Page_Load, to bude asi brzo. Můžeš mi prosím poradit v jaké události bych na něj měl odkazovat?

 
Nahoru Odpovědět 17.9.2014 21:31
Avatar
Maros2470
Člen
Avatar
Odpovídá na coells
Maros2470:

Můžeš mi nějakou knihu doporučit?

 
Nahoru Odpovědět 17.9.2014 21:36
Avatar
coells
Redaktor
Avatar
Odpovídá na Maros2470
coells:

Page_Load() se zavolá ve chvíli, kdy se nahrála stránka, takže obvykle bývají kontrolní prvky už k dispozici, ale stále před zpracováním událostí. OnPreRender() se volá až po zpracování událostí a často bývá výhodnější mít kód tam, záleží případ od případu.

Udělej si naprosto minimální Default.aspx s FormView, v něm binding a vyzkoušej, jestli ti to funguje. Pokud ne, pošli mi kód aspx i aspx.cs, abych ti tam mohl najít chybu. Nemám tušení, co tam děláš špatně.

Z trochu jiného soudku, magická metoda Page_Load() by se neměla používat, používej radši OnLoad(). Page_Load() je pozůstatek ASP, který do ASP.NET nepatří.

 
Nahoru Odpovědět 17.9.2014 21:46
Avatar
coells
Redaktor
Avatar
Odpovídá na Maros2470
coells:

Je to v podstatě jedno, skoro všechny mají přes 1000 stránek a skoro všechny jsou o tom samém. Dříve jsem kupoval přes Amazon, což je už léta jednodušší díky německému Amazonu, dneska už kupuji pouze na Kindle. Knihy v češtině se nevyplatí.

 
Nahoru Odpovědět 17.9.2014 21:50
Avatar
Odpovídá na Maros2470
Michal Štěpánek:

http://www.webforms.cz/Tutorialy.aspx
je to sice ze starší verze, ale je tam mnoho užitečných rad...

Nahoru Odpovědět 17.9.2014 22:00
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Odpovídá na coells
Maros2470:

Tak jsem udělal úplně jednoduchou aplikaci s jednou stránkou:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;


namespace Zkoska1
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var statusLabel = FindControl<Label>(FormView1, "StatusLabel");
            if (statusLabel.Text == "Vyhovuje")
            {
                statusLabel.BackColor = System.Drawing.Color.Green;
            }

            else if (statusLabel.Text == "Nevyhovuje")
            {
                statusLabel.BackColor = System.Drawing.Color.Red;
            }


        }

        private static T FindControl<T>(Control control, string id) where T : Control
        {
            if (control == null)
                return null;

            if (control.ID == id)
                return (T)control;

            return control.Controls.OfType<Control>().Select(c => FindControl<T>(c, id)).Where(c => c != null).FirstOrDefault();
        }
    }
}
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Zkoska1._Default" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">

    <asp:TextBox ID="txbPrijmeni" runat="server"></asp:TextBox>

   <asp:FormView ID="FormView1" runat="server" DataKeyNames="Id" DataSourceID="SqlDataSource1">
       <EditItemTemplate>
           Id:
           <asp:Label ID="IdLabel1" runat="server" Text='<%# Eval("Id") %>' />
           <br />
           Jmeno:
           <asp:TextBox ID="JmenoTextBox" runat="server" Text='<%# Bind("Jmeno") %>' />
           <br />
           Prijmeni:
           <asp:TextBox ID="PrijmeniTextBox" runat="server" Text='<%# Bind("Prijmeni") %>' />
           <br />
           Mesto:
           <asp:TextBox ID="MestoTextBox" runat="server" Text='<%# Bind("Mesto") %>' />
           <br />
           Status:
           <asp:TextBox ID="StatusTextBox" runat="server" Text='<%# Bind("Status") %>' />
           <br />
           <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="Aktualizovat" />
           &nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Storno" />
       </EditItemTemplate>
       <InsertItemTemplate>
           Jmeno:
           <asp:TextBox ID="JmenoTextBox" runat="server" Text='<%# Bind("Jmeno") %>' />
           <br />
           Prijmeni:
           <asp:TextBox ID="PrijmeniTextBox" runat="server" Text='<%# Bind("Prijmeni") %>' />
           <br />
           Mesto:
           <asp:TextBox ID="MestoTextBox" runat="server" Text='<%# Bind("Mesto") %>' />
           <br />
           Status:
           <asp:TextBox ID="StatusTextBox" runat="server" Text='<%# Bind("Status") %>' />
           <br />
           <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert" Text="Vložit" />
           &nbsp;<asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Storno" />
       </InsertItemTemplate>
       <ItemTemplate>
           Id:
           <asp:Label ID="IdLabel" runat="server" Text='<%# Eval("Id") %>' />
           <br />
           Jmeno:
           <asp:Label ID="JmenoLabel" runat="server" Text='<%# Bind("Jmeno") %>' />
           <br />
           Prijmeni:
           <asp:Label ID="PrijmeniLabel" runat="server" Text='<%# Bind("Prijmeni") %>' />
           <br />
           Mesto:
           <asp:Label ID="MestoLabel" runat="server" Text='<%# Bind("Mesto") %>' />
           <br />
           Status:
           <asp:Label ID="StatusLabel" runat="server" Text='<%# Bind("Status") %>' />
           <br />

       </ItemTemplate>
    </asp:FormView>

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [Osoby] WHERE ([Prijmeni] = @Prijmeni)">
        <SelectParameters>
            <asp:ControlParameter ControlID="txbPrijmeni" Name="Prijmeni" PropertyName="Text" Type="String" />
        </SelectParameters>
    </asp:SqlDataSource>

</asp:Content>

Data v tabulce nemají žádný význam je to jen na zkoušku

Editováno 19.9.2014 13:15
 
Nahoru Odpovědět 19.9.2014 13:13
Avatar
Maros2470
Člen
Avatar
Odpovídá na coells
Maros2470:

Zkusil jsem to i přes tlačítko a je tam stejná chyba

 
Nahoru Odpovědět 19.9.2014 13:24
Avatar
coells
Redaktor
Avatar
Odpovídá na Maros2470
coells:

Aha, už chápu. Máš dvě možnosti:

  1. dát ten kód do metody OnPreRenderCom­plete() místo OnLoad()
  2. pověsit se na událost FormView.DataBound a dát ho tam

První varianta je jednodušší, druhá je korektní. Událost DataBound se bude volat po ukončení fáze pre-render, kdy jsou vytvořené kontrolky FormView a provázaná data.

Dále přestaň používat metodu Page_Load(), jak už jsem ti psal, místo toho používej OnLoad().

A hlavně si o tom přečti knížku a ne žádné další tutoriály.

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    FormView2.DataBound += FormView2_DataBound;
}

void FormView2_DataBound(object sender, EventArgs e)
{
    var statusLabel = FormView2.FindControl("PrijmeniLabel") as Label;
    if (statusLabel != null)
    {
        if (statusLabel.Text == "Vyhovuje")
        {
            statusLabel.BackColor = System.Drawing.Color.Green;
        }

        else
        {
            statusLabel.BackColor = System.Drawing.Color.Red;
        }
    }
}
 
Nahoru Odpovědět 19.9.2014 13:55
Avatar
Maros2470
Člen
Avatar
 
Nahoru Odpovědět 19.9.2014 14:49
Avatar
Maros2470
Člen
Avatar
Odpovídá na coells
Maros2470:

Jen ještě jedna chyba a tu teda nechápu. Zabarvení do červena v závislosti na textu funguje, ale do zelena ne.

 
Nahoru Odpovědět 19.9.2014 16:39
Avatar
coells
Redaktor
Avatar
Odpovídá na Maros2470
coells:

to je jednoduché, budeš mít špatně tu podmínku

 
Nahoru Odpovědět 19.9.2014 16:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 55 zpráv z 55.