\

Školení Návrhové vzory, OOP a UML


 Sunday, April 25, 2004
Výběr ze seznamu Id serverových ovládacích prvků na stránce

V konferenci EMWAC se objevil příspěvek http://konference.vyvojar.cz/post.aspx?id=53046, jehož autor chce do vlastnosti ve svém serverovém ovládacím prvku uložit Id jiného ovládacího prvku na stránce. Vývojář by neměl zapisovat Id přímo, ale vybírat ze seznamu na stránce vlastností. První myšlenkou autora příspěvku bylo nadeklarovat vlastnost jako WebControl - to je samozřejmě nesmysl. Když zkusíme perzistovat vlastnost na stránce (atribut PersistenceMode), tak dosáhneme pouze toho, že validátor ASPX stránky nás bude upozorňovat, že máme na stránce 2 prvky se stejným Id.

To, o co se autor snaží, umí všichni validátoři. Jejich vlastnost ControlToValidate nabídne Id všech prvků na stránce, kteří obsahují vlastnost dekorovanou atributem ValidationProperty. Vlastnost ControlToValidate je samozřejmě typu string. Seznam Id naplní speciální TypeConverter s názvem ValidatedControlConverter.

ValidatedControlConverter nelze použít pro načtení seznamu Id všech prvků na stránce, protože, jak jsem již napsal, ta bere v úvahu jen prvky s vlastností označenou atributem ValidationProperty. Proto jsem napsal ControlConverter, který nalezne Id všech prvků na stránce.

public

class ControlConverter : StringConverter

{

  public ControlConverter() : base ()

  {

  }

  public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)

  {

    

if ((context == null ) || (context.Container == null ))

        return null ;

     object [] foundControls = enumerateControls(context.Container);

     if (foundControls == null )

     return null ;

     return new StandardValuesCollection(foundControls);

  }

  public override bool GetStandardValuesSupported(ITypeDescriptorContext context)

  {

    return true ;

  }

  public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)

  {

    return false ;

  }

  private object [] enumerateControls(IContainer container)

  {

    ArrayList retList = new ArrayList();

    foreach (IComponent component in container.Components)

   {

      Control foundControl = component as Control;

      if (foundControl == null )

       continue ;

     if ((foundControl.ID == null ) ||

        (foundControl.ID == String.Empty))

           continue ;

      retList.Add(foundControl.ID);

  }

   return retList.ToArray();

  }

}

Converter se u vlastnosti použije takto:

[Browsable(

true )]

[TypeConverter(

typeof (ControlConverter))]

public string MyControl

{

  get

  {

    string myControl = ( string ) ViewState["MyControl"];

    return (myControl == null ? String.Empty : myControl);

  }

  set

  {

    ViewState["myControl"] =

value ;

  }

}



Sunday, April 25, 2004 6:44:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [2]  ASP.NET | .NET Framework


Proč další weblog?

V prvním příspěvku je nedobrým zvykem přivítat odvážného čtenáře a nepřímo mu polichotit, jaký prokázal dobrý vkus, že se stavil, a také jej nenásilně vést k poznání, že by bylo společenským faux pas, kdyby se nezastavil znovu. Nevím, jestli je v tom zákonitost přírodní nebo společenská , ale nejlepší v nesmrtelné disciplíně lichocení bývají rychlokvašení autoři, jejichž duševní invence a chuť psát zmizí po třech dalších upocených a z duševní mizérie vydolovaných příspěvcích. Takže první zásada, drbání za ušima, milý svéprávný čtenáři, na tomto weblogu nikdy nebude.

V nadpise příspěvku je otázka, která vyjadřuje mé vlastní pochybnosti o smyslu psaní weblogu. Je psaní weblogu pouhým projevem grafomanie a snahy autora vykřičet do světa své „originální“ já? Nebo je weblog sbírkou většinou nekomentovaných hypertextových odkazů, veřejně sdílenými záložkami autora, který tím chce světu cosi sdělit? Ale co? Snad, já také umím hledat v Googlu, a protože jsem vždy „in“ v technologiích, tak používám čtečku RSS? :) Takto pojaté weblogy jsou pouhým plevelem, roztříštěným, plochým a všedním svědectvím o aktivitách občas (buďme spravedliví) alespoň marginálně zajímavých dušiček, které nedokáží reflektovat sami sebe s dostatečným nadhledem. Zásada druhá – tento weblog není a nebude sbírkou mých do světa vykřičených komplexů, deprivací, úchylek a ani se nestane chytřejším bratrancem záložek z Internet Exploreru.

 Přes všechny mé výhrady jsem si weblog zřídil. Weblogy jsem kritizoval dlouho, ale nikdy jsem nedokázal říci, že weblogy jsou je pouhá efemérní móda, která nic nepřináší. Našel jsem si „své“ weblogy, které si rád přečtu. Jako pars pro toto bych uvedl weblog Patrika Zandla s názvem Marigold . Patrik Zandl velmi dobře ví, jak vytvořit zajímavý weblog – viz jeho článek. Myslím, že nejdůležitější v článku uváděnou zásadou je ta, která říká, že weblog by měl mít obsah určený nejen k přečtení a zapomenutí, ale také trvalejší obsah, kvůli kterému se budou čtenáří vracet. Zásada třetí – tento weblog se nechce stát další dokonalou ilustrací úsloví „jedním uchem dovnitř a tím druhým ven“. V pláštíku weblogu se budu vyjařovat k tématům, jež mě zajímají a o nichž si myslím, že budou zajímat i ostatní.

V předmluvě každé knihy je většinou informace o autorovi, a proto i v úvodním příspěvku weblogu napíšu alespoň pár základních údajů o sobě, abyste měli lepší představu, kdo to tu káže, a dokázali si alespoň v hrubých konturách personifikovat moji osobnost pro případná proklínání nebo vytvoření schematického portrétu, na nějž se házejí úlevné psychohygienické šipky.:) Je mi 26 let a pracuji jako analytik a vývojář v SW společnosti DIGI TRADE . Ve weblogu se budete setkávat s postřehy k UML, návrhovým vzorům a OO principům obecně. Vyvíjím hlavně na platformě NET Framework, kterou jsem si oblíbil ještě když byla v plenkách, respektive v Beta verzi, a proto se mnoho příspěvků bude týkat jí a také její „odlehčené-compact“ verze určené pro mobilní zařízení. Moje články o analýze a vývoji můžete najít na serveru Interval.cz . Přispívám také do konfererencí EMWAC VS.NET a Builder .Net. Za publikační činnost a příspěvky v konferencích mi byl v lednu 2004 společností Microsoft propůjčen MVP titul. Mobilní zařízení (PDA s Windows Mobile, mobilní telefony) a GSM/UMTS sítě jsou dalším tématem weblogu. Nyní je mým hlavním domácím mazlíčkem (samozřejmě kromě manželky :) ) MDA II , o němž jsem psal na MobilManii.

Ač souhrou okolností, nutností a náhod, které se občas eufemisticky říká život, se nyní zabývám hlavně technickými obory, nebylo tomu tak vždy, a moje studium se zaměřovalo na humanitní vědy. Jak to pregnantně vyjadřuje podtitulek weblogu, humanitní zájmy docelují moje vnímání světa a jsou příjemným korektivem k přetechnizovanému všednímu životu. Proto se na tomto weblogu setkáte i s komentáři k mé oblíbené literatuře (Ludvík Vaculík, Pavel Kohout, Jan Skácel, Oldřich Mikulášek, Dostojevskij...) a filosofii (Martin Heidegger, Jan Patočka, Vídeňský kroužek, strukturalismus, fenomenologie...). Jestliže Vám budou připadat některé mé závěry ve weblogu příliš subjektivní, apodiktické nebo paradoxní, pak vězte, že souhlasím s tezí „paradox je vášeň myšlení“ (Kierkegaard) a že pokud něco říkám, tak tím vyjadřuji „zde stojím, nemohu jinak“. Poslední citát pochází od Luthera a já jsem katolík. A tak je to u mě se vším.:)

Pokud jste dočetli příspěvek až sem, tak Vás vítám. Myslím, že si budeme rozumět.



Sunday, April 25, 2004 3:51:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [9]  Ostatní