» »

ASP.NET, C# spletna aplikacija in dodajanje kontrol v run time-u programa

ASP.NET, C# spletna aplikacija in dodajanje kontrol v run time-u programa

Small_Hobit ::

Pozdravljeni,
zanima me kako se shrani oz. obdrži dodano kontrolo v run time-u programa. Torej, če dodam labelo in text box iz kode (primer spodaj) bi želel, da mi to ostane v programu kot, da bi bilo ročno napisano v kodi in da ne izgine kadar se program zaustavi oz. ustavi in zažene ponovno.

Tako sem ustvaril text box in labelo dinamično iz programa:

protected void Button1_Click(object sender, EventArgs e)
    {
        var txt = new TextBox();
        txt.ID = "textBox1";
        txt.Text = "helloo";
        form1.Controls.Add(txt);

        var lbl = new Label();
        lbl.ID = "label1";
        lbl.Text = "I am a label";
        form1.Controls.Add(lbl);

        // Increase the number added and add the new label and textbox
        TotalNumberAdded++;
        AddControls(TotalNumberAdded);
    }


Cilj te rešitve pa je, da lahko uporabnik programa sam dodaja kontrolne gradnike oz. si delno prilagodi program.

Lep pozdrav,
Alex

nightrage ::

Pač daš vse na formo in glede na določene statuse (ne vem boolean spremenljivke) nastavljaš Visible setting.

sebastjan28 ::

Lahko bi vse potrebne informacije shranil v bazi in jih nato ob nalaganju strani prebral - samo takšna rešitev postane zelo hitro zelo zapletena.

Druga rešitev je, da uporabiš XML + XSD transformation. V bazi shraniš samo xsd, ki ga uporabnik nato spreminja. Na takšen način večinoma deluje elektronsko podpisovanje v slo,..

joze67 ::

Kar si želiš, je serializacija kontrol (primer). V navedenem primeru serializira samo kontejner in vsebino. Lahko pa da tvoj primer ne omogoča, da so vse dodane kontrole v ločenem kontejnerju; potem malo prilagajaš ali pa spišeš svoj "serializator", ki je xml/json/... opis tega, kar je uporabnik do dne dodal (in obdržal). Potem na začetku programa prebereš ta seznam in ponovno kreiraš kontrole.

Small_Hobit ::

Najprej hvala za že podane odgovore saj sem imel spet smernice kaj iskati. Ne vem pa ali se napačno lotim zadeve ali pa imam enostavno premalo znanja iz tega področja (asp.net) ampak poskušal sem že naslednje rešitve:

-kontrole dodati v seznam in kasneje prilagajati viewstate, ki bi jih naj vedno prebral iz seznama
-dodajati kontrole v razne kontejnerje
-po dodajanju prebrati source strani in kasneje prepisati obstoječi source s tistim, ki je bil začasen ampak sem ga kopiral
-poskušal z userControl
-poskušal tudi s serializacijo (vendar imel tukaj kar nekaj težav)

In verjetno še kakšne 3-4 podobne zadeve oz. variacije zgoraj navedenih ampak mi še zmeraj ni uspelo na mojo žalost.

Zanima pa me oz. najlepše naprošam nekoga, ki ima izkušnje s tem (to je namreč moja prva bolj obširna asp.net aplikacija in kodo ter postopke sicer razumem ne poznam pa vseh metod in možnosti, ki obstajajo oz. so možne), če se komu ljubi prikazati ali mi razložiti čisto preprost primer kako dodano kontrolo obdržati v samem programu. Samo 1 osnoven primer, da bom kasneje lahko delal po istem kopitu za druge kontrole oz. kontrole razširil na skupino kontrol ali dodajal kar cel kontejner kontrol.

Lep pozdrav,
Alex

swdev ::

Si razmišljaj kaj takšnega:

- ustvari si tabelo "Kontrole" v svoji PB (stolpiči npr.: "IDkontrole", "tipKontrole", "drugiAtributiKontrole..."),
- napiši si metodo, ki ti pridobljene vrstice iz PB pretvori v kontrole, ter jih doda na form,
- ko ustvariš kontrolo jo shrani v PB,
- ob zagonu aplikacije najprej kliči metodo za pretvorbo vrstic v kontrole

Najbolj preprosta varijanta.

swdev ::

Si razmišljaj kaj takšnega:

- ustvari si tabelo "Kontrole" v svoji PB (stolpiči npr.: "IDkontrole", "tipKontrole", "TextKontrole", "drugiAtributi..."),
- napiši si metodo, ki ti pridobljene vrstice iz PB pretvori v kontrole, ter jih doda na form,
- ko ustvariš kontrolo jo shrani v PB,
- ob zagonu aplikacije najprej kliči metodo za pretvorbo vrstic v kontrole

Najbolj preprosta varijanta.

Primer metode recimo (z uporabo EF, ob predpostavki, da imaš razred "Kontrola", ki ima lastnosti IDKontrole, TextKontrole, tipKontrole):
void prikaziKontrole()
{
     List<Kontrola> seznamKontrol=db.seznamKontrol.ToList();
     foreach (var a in seznamKontrol)
     {
         if (a.tipKontrole=="TextBox")
         {
              TextBox t=new TextBox();
              t.ID=a.IDKontrole;
              t.Text=a.TextKontrole;
              form1.Controls.Add(t);
         }
         else if (a.tipKontrole=="Label")
         {
             Label l=new Label();
             l.ID=a.IDKontrole;
             l.Text=a.TextKontrole;
             form1.Controls.Add(l);
         }
         //else if (........)
         //{}
     }
 }


EDIT: Prejšnjega posta mi ni uspelo edita, ne vem iz kakšnega razloga.

Zgodovina sprememb…

  • spremenilo: swdev ()

kuall ::

Zapiši ustvarjene kontrole v .ascx fajl (enostavno ga zapiši kot text fajl) in to user kontrolo dinamično naloži s Page.LoadControl(ascxFileName)

Če rabiš tudi urejanje in brisanje kontrol imaš še vedno opcijo iskanja kontrol s Page.FindControl() ali pa loopanje čez vse kontrole je tudi možno (išči stackoverflow)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# textbox polnjenje

Oddelek: Programiranje
71632 (1497) Mitja Bonča
»

Spremljanje dogajanja na ekranu

Oddelek: Programiranje
81273 (1132) boss-tech
»

C# Program

Oddelek: Programiranje
393104 (2027) Spura
»

C#, Dodajanje podatkov v Arraylist z Gumbom

Oddelek: Programiranje
82287 (2126) Beezgetz
»

[VB express edition] problem

Oddelek: Programiranje
71383 (1286) frudi

Več podobnih tem