Datalist findcontrol   zodpovězená otázka

ASP.NET WebForms

Ahoj, mám takový menší problém.

Na stránce zobrazuji v datalistu příspěvky fóra a u každého je tlačítko kterým může administrátor odstranit nevhodný příspěvek.

Problém mám v tom že nevím jak to tlačítko zobrazit. V pageloadu si zkontroluju zda je uživatel v příslušné roli ale dál se mi nějak nedaří, proto bych se chtěl zeptat zkušenějších programátorů jak na to.

Předem díky za odpovědi a rady

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Řešilo se to zde již několikrát.Je potřeba "projít" komponentu a vyhledat všechny prvky které chcete modifikovat.Následně jim nastavit požadovanou vlastnost.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

nejdříve jsem se snažil najít jestli někdo neřešil podobný problém ale to se mi nepovedlo.

Tuším že je komponentu projít a nastavit požadované prvky ale nějak se mi nedaří.

Zkoušel jsem to nějak takhle:

if (Context.User.IsInRole("admin"))
            {
                for (int i = 1; i < DataList1.Items.Count; i++)
                {
                    Button tlacitko = (Button)DataList1.Items[i].FindControl("ButtonSpam");
                    tlacitko.Visible = true;
                    
                }
               
            }

Což by mělo projít celý datalist a nastavit visible na true

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste to nějak takhle - píšu z hlavy,takže za to 100% neručím :)

if (Context.User.IsInRole("admin")) 
    foreach (DataListItem dlitems in DataList1.Items)
            {
                Button tlacitko = (Button)dlitems.FindControl("ButtonId");
                tlacitko.Visible = true;
            }

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Už mi to funguje, problém byl v tom že jsem ten kód měl vložený do page loadu a nějak se to neprovede, ale když jsem na stránu vložil tlačítko a ten kód dal do vlastnosti button click tak se mi v datalistu tlačítka zobrazí jak potřebuju.

S tím se ale otevřela další otázka, kam vložit ten kus kódu aby se provedl automaticky po načtení stránky a nemuselo se klikat na nějaké tlačítko

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pro tuto úpravu použijte metodu Page_PreRender

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Delate si zbytecne praci na vic. Proc pristupujete ke controls v udalosti Page_Load a delate tam zbytecny cyklus, kdyz na to mate prave udalosti ItemDataBound nebo 'ItemCrated' v DataListu.

protected void Datalist_ItemCreated(object sender, DatalistItemEventgars e)
{

if (User.IsInRole("Admin"))
{

     Button tlacitko_smazat = (Button)e.Item.FindControl("idTlacitko");
     tlacitko_smazat.visible = true;

}

}

Pro mazani pouzijte udalost ItemCommand a tam si dejte paricny kod pro smazani prispevku ...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky moc za rady, už mi to funguje jak jsem potřeboval

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Máte pravdu.Tohle řešení je elegantnější,v tu chvíli mě nějak nenapadlo :) Ale nemyslím si,že by postup pomocí cyklu nějak přidělával práci,to určitě ne.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback