<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Vlatkovic.NET - Programiranje</title>
    <link>http://www.vlatkovic.net/</link>
    <description />
    <language>en-us</language>
    <copyright>Predrag Vlatković</copyright>
    <lastBuildDate>Tue, 15 Jan 2008 22:41:27 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>info@vlatkovic.net</managingEditor>
    <webMaster>info@vlatkovic.net</webMaster>
    <item>
      <trackback:ping>http://www.vlatkovic.net/Trackback.aspx?guid=28414adb-3fad-487c-a3b0-c32c1566b796</trackback:ping>
      <pingback:server>http://www.vlatkovic.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.vlatkovic.net/PermaLink,guid,28414adb-3fad-487c-a3b0-c32c1566b796.aspx</pingback:target>
      <dc:creator>Peca Vlatković</dc:creator>
      <wfw:comment>http://www.vlatkovic.net/CommentView,guid,28414adb-3fad-487c-a3b0-c32c1566b796.aspx</wfw:comment>
      <wfw:commentRss>http://www.vlatkovic.net/SyndicationService.asmx/GetEntryCommentsRss?guid=28414adb-3fad-487c-a3b0-c32c1566b796</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h5>I opet malo programiranja, ovog puta o proširivanju postojećih asp.net severskih
kontrola na primeru GridView-a. 
</h5>
        <p>
Cilj ovog teksta je da pokaže kako se postojeće ASP.NET serverske kontrole mogu relativno
lako dograditi tako da im se poveća funkcionalnost. Kao primer sam uzeo GridView koji
u osnovnoj postavi nema  multiselect ali uz malo dorade postaje vrlo sličan gridovima
koje srećemo u windows programiranju. Ideja je da možemo da izaberemo više redova
u GridView tako što ćemo prilikom izbora držati taster CTRL. 
</p>
        <p>
Realizacija je sledeća: kad god kliknemo na neki red u GridView kontroli izvrši se
registracija tog klika i nakon postback-a se čitaju indeksi kliknutih redova na osnovu
kojih vraćamo redove u kontroli koji su izabrani. 
</p>
        <p>
Prvi korak je da kreiramo novu klasu koja će predstavljati DataGrid sa multiselect
opcijom. Ona će biti izvedena iz  System.Web.UI.WebControls.GridView klase i
čime obezbeđujemo nasleđivanje svih osobina i metoda ove klase na koje smo navikli. 
</p>
        <p>
public class MultiSelectGridView : System.Web.UI.WebControls.GridView
</p>
        <p>
Zatim je potrebno da na svaki red koji generiše osnovna  GridView klasa “zalepimo”
onclick javascript događaj (event handler). To radimo tako što promenimo OnRowDataBound
metodu iz osnovne klase. 
</p>
        <p>
1: protected override void OnRowDataBound(GridViewRowEventArgs e)<br />
2:  {<br />
3:   base.OnRowDataBound(e);<br />
4:<br />
5:   if (e.Row.DataItem != null)<br />
6:   {<br />
7:    e.Row.Attributes.Add("OnClick", "msel(event)");<br />
8:<br />
9:    _id = this.PageIndex + "." + e.Row.RowIndex.ToString();<br />
10:    e.Row.Attributes.Add("index", _id);<br />
11:   }<br />
12:  }
</p>
        <p>
Glavna stvar se nalazi u liniji 7, gde na Row element dodajemo atribut OnClick koji
će izvršavati msel(event) javascript funkciju na svaki klik. Javascript funkcija msel
registruje gde se izvršio click događaj i upisuje indeks kliknutog elementa u skriveno
(hidden) polje čiju vrednost ćemo kasnije, u postback-u, da parsiramo. Ovu funkciju
ćemo da kreiramo i registrujemo kasnije.<br />
Sledeća stvar se nalazi na linijama 9 i 10. Naime, tu kreiramo indeks elementa koji
je kliknut i vezujemo ga za sam element. Njegova konstrukcija je vrlo jednostavna,
“_id = broj stranice + tačka + indeks trenutnog reda”. Dobijeni indeks se upisuje
kao dodatni atribut u element koji predstavlja red u GridView-u.<br />
Da bi na klijentskoj strani znali koji red je izabran kreiramo Javascript funkciju
“msel“ koju ćemo kasije da registrujemo na strani (podvučeni delovi code-a se automatski
generišu u runtime-u).
</p>
        <p>
Pre nego što prokomentarišem javascript code, da kažem par reči o html code-u koji
generiše standardni GridView. GridView je u stvari obična tabela tj &lt;table&gt;&lt;tr&gt;&lt;td&gt;...
konstrukcija. &lt;tr&gt; tag predstavlja red u našoj kontroli (Row) i na njega se
“lepi” OnClick event. Sam event se zapravo okida na &lt;td&gt; elementu ali se propagira
do prvog roditeljskog (parent) elementa koji ima handler tj definisan onclick a to
je &lt;tr&gt; element. I evo javascript-a koji se generiše.<br />
Da prokomentarišemo javascript.
</p>
        <p>
1:&lt;script language="javascript"&gt;<br />
2: function msel(e, o)<br />
3: {
</p>
        <p>
kreiramo referencu na skriveni (hidden) html element koji u sebi sadrži informacije
koji redovi su selektovani
</p>
        <p>
4:  var selected = document.getElementById(o); 
</p>
        <p>
Zatim kreiramo referencu prema Event-u koji je inicirao izvršenje funkcije. Ova referenca
nam treba da bi saznali koji je objekat inicirao Event i da li je pri kliku bio pritisnut
taster CTRL. Linija 6 daje neposredni objekat koji je inicirao event, u ovom slučaju
&lt;td&gt; tj ćeliju koja se nalazi unutar &lt;tr&gt; elementa. Na liniji 7 hvatamo
sam &lt;tr&gt; element koji nosi informaciju o tome koji je indeks kliknutog elementa.
</p>
        <p>
5:  e = e ? e : ((window.event) ? event : null);<br />
6:  var obj = e.target ? e.target : ((e.srcElement) ? e.srcElement : null);<br />
7:  obj = obj.parentElement ? obj.parentElement : obj.parentNode;<br />
8:  var objParent = obj.parentElement ? obj.parentElement : obj.parentNode;
</p>
        <p>
Na linijama 9 i 10  kreiramo objekte String tipa koji redom nose podatke o izabranim
redovima i o trenutno kliknutom objektu tj njegovom indeksu. 
</p>
        <p>
9:  var sel = new String(selected.value);<br />
10:  var id = new String(obj.getAttribute("index"));<br />
11:  var cssclass;<br />
12:  
</p>
        <p>
Linija 13 ispituje da li je prilikom klika bio pritisnut i taster CTRL. Ukoliko jeste
na liniji 14 proveravamo da li je red već izabran. Ukoliko jeste, ukloni ga iz liste
izabranih i promeni css klasu za tekuću liniju. U suprotnom ubaci ga na listu izabranih
i promeni css klasu.
</p>
        <p>
13:  if (e.ctrlKey) {<br />
14:   if (sel.indexOf("-" + id + "-") &gt; -1) {<br />
15:    selected.value = sel.replace("-" + id + "-", "");<br />
16:    obj.className = "CssClassRow";<br />
17:   }<br />
18:   else {<br />
19:    selected.value = sel + "-" + id + "-"; 
<br />
20:    obj.className = "CssClassRowSelected";<br />
21:   } 
<br />
22:  } 
</p>
        <p>
Ukoliko CTRL nije pritisnut (linija 23) lista izabranih indeksa svodi se na trenutno
izabran a css klase se menjaju tako da su svi objekti neselektovani.  
</p>
        <p>
23:  else { 
<br />
24:   if (sel.indexOf("-" + id + "-") &gt; -1) { 
<br />
25:    cssclass = "CssClassRow"; selected.value = ""; 
<br />
26:   } 
<br />
27:   else { 
<br />
28v    cssclass = "CssClassRowSelected"; 
<br />
29:    selected.value = "-" + id + "-"; 
<br />
30:   } 
<br />
31:   var trs = objParent.getElementsByTagName("tr");<br />
32:   for(i = 0; i &lt; trs.length; i++) 
<br />
33:    if (trs[i].getAttribute("index"))<br />
34:     trs[i].className = "CssClassRow";obj.className =
cssclass;<br />
35:    } 
<br />
36:  } 
</p>
        <p>
 Napomena: podvučeni delovi se generišu
</p>
        <p>
Funkcija  disableSelection samo ne dozvoljava da se na kliknutim redovima izvrši
selekcija teksta. Za detalje pogledajte <a href="http://www.dynamicdrive.com/dynamicindex9/noselect.htm">http://www.dynamicdrive.com/dynamicindex9/noselect.htm</a>. 
</p>
        <p>
37: function disableSelection(target) {  <br />
38:  if (typeof target.onselectstart!="undefined")   <br />
39:   target.onselectstart=function(){return false;};  <br />
40:  else if (typeof target.style.MozUserSelect!="undefined")    <br />
41:   target.style.MozUserSelect="none";   <br />
42:  else   <br />
43:   target.onmousedown=function(){return false;};  <br />
44:  target.style.cursor = "default"; 
<br />
45: } 
<br />
46:&lt;/script&gt;
</p>
        <p>
          <br />
Ok, sledeća metoda koju menjamo u odnosu na originalnu GridView klasu je OnRowCreated. 
</p>
        <p>
1:protected override void OnRowCreated(GridViewRowEventArgs e)<br />
2:{<br />
3: base.OnRowCreated(e);<br />
4:<br />
5: _id = this.PageIndex + "." + e.Row.RowIndex.ToString();<br />
6:<br />
7: if (selected != null &amp;&amp; selected.IndexOf("-" + _id + "-") &gt; -1)<br />
8:     e.Row.CssClass = CssClassRowSelected;<br />
9: else<br />
10:     e.Row.CssClass = CssClassRow;<br />
11:}
</p>
        <p>
Opet kreiramo indeks, linija 5, i ako je trenutni red u listi selektovanih onda mu
menjamo css klasu. 
</p>
        <p>
I na kraju menjamo CreateChildcontrols metodu. Zapravo samo je proširujemo. Cilj je
da između svakog postback-a očuvamo stanje selektovanih redova. 
</p>
        <p>
1:protected override void CreateChildControls()<br />
2:{
</p>
        <p>
Naravno pustimo da se kreiraju sve potrebne kontrole koje se kreiraju za GridView
(Linija 3)
</p>
        <p>
3: base.CreateChildControls();<br />
4:<br />
5: string[] selectedArray;<br />
6:<br />
7: if (!string.IsNullOrEmpty(selected))<br />
8: {
</p>
        <p>
Izdvojimo indekse redova selektovanih na client strani (linija 9.) .
</p>
        <p>
9:  selectedArray = selected.Split('-');<br />
10:
</p>
        <p>
Kreiramo listu int vrednosti koja će sadržati indekse izabranih redova.
</p>
        <p>
11:  SelectedIndexs = new List&lt;int&gt;();
</p>
        <p>
Kreiramo string niz koji će u sebi sadržati tekuću stranu i tekući index na strani.
</p>
        <p>
12:  string[] pageAndIndex;
</p>
        <p>
Za svaki element u selectedArray a na osnovu stranice i indeksa preračunamo pravi
indeks i ubacimo u  SelectedIndexs.
</p>
        <p>
13:  foreach (string s in selectedArray)<br />
14:  {<br />
15:   if (s.Length &gt; 0)<br />
16:   {<br />
17:    pageAndIndex = s.Split('.');<br />
18:    SelectedIndexs.Add(int.Parse(pageAndIndex[0]) * this.PageSize
+ int.Parse(pageAndIndex[1]));<br />
19:   }<br />
20:  }<br />
21: }<br />
22:
</p>
        <p>
Registrujemo skriveno html polje u koje upisujemo koji su izabrani redovi.
</p>
        <p>
23: this.Page.ClientScript.RegisterHiddenField(selectedKey, selected);
</p>
        <p>
Registrujemo blok sa javascript funkcijama opisanim gore.
</p>
        <p>
24: this.Page.ClientScript.RegisterClientScriptBlock( ( (System.Web.UI.WebControls.GridView)this).GetType(),
"MultiselectGridView_js", js);<br />
25:
</p>
        <p>
I na kraju na GridView kontrolu dodamo još jednu literal kontrolu koja u sebi sadrži
poziv funkcije  disableSelection koja ne dozvoljava da se selektuje tekst na
upravo kreiranoj kontroli.
</p>
        <p>
26: Literal l = new Literal();<br />
27: l.Text = "&lt;script language=\"javacript\" type=\"text/javascript\"&gt;disableSelection(document.getElementById(\""
+ this.ClientID + "\"));&lt;/script&gt;";<br />
28: this.Controls.Add(l);<br />
29:}
</p>
        <p>
I to je to, kompletan code možete da skinete <a href="http://www.vlatkovic.net/download/GridView_na_kvadrat.zip">ovde</a>.
</p>
        <img width="0" height="0" src="http://www.vlatkovic.net/aggbug.ashx?id=28414adb-3fad-487c-a3b0-c32c1566b796" />
      </body>
      <title>GridView na kvadrat -  multiselect</title>
      <guid isPermaLink="false">http://www.vlatkovic.net/PermaLink,guid,28414adb-3fad-487c-a3b0-c32c1566b796.aspx</guid>
      <link>http://www.vlatkovic.net/2008/01/15/GridView+Na+Kvadrat+Multiselect.aspx</link>
      <pubDate>Tue, 15 Jan 2008 22:41:27 GMT</pubDate>
      <description>&lt;h5&gt;I opet malo programiranja, ovog puta o proširivanju postojećih asp.net severskih
kontrola na primeru GridView-a. 
&lt;/h5&gt;
&lt;p&gt;
Cilj ovog teksta je da pokaže kako se postojeće ASP.NET serverske kontrole mogu relativno
lako dograditi tako da im se poveća funkcionalnost. Kao primer sam uzeo GridView koji
u osnovnoj postavi nema&amp;nbsp; multiselect ali uz malo dorade postaje vrlo sličan gridovima
koje srećemo u windows programiranju. Ideja je da možemo da izaberemo više redova
u GridView tako što ćemo prilikom izbora držati taster CTRL. 
&lt;/p&gt;
&lt;p&gt;
Realizacija je sledeća: kad god kliknemo na neki red u GridView kontroli izvrši se
registracija tog klika i nakon postback-a se čitaju indeksi kliknutih redova na osnovu
kojih vraćamo redove u kontroli koji su izabrani. 
&lt;/p&gt;
&lt;p&gt;
Prvi korak je da kreiramo novu klasu koja će predstavljati DataGrid sa multiselect
opcijom. Ona će biti izvedena iz&amp;nbsp; System.Web.UI.WebControls.GridView klase i
čime obezbeđujemo nasleđivanje svih osobina i metoda ove klase na koje smo navikli. 
&lt;/p&gt;
&lt;p&gt;
public class MultiSelectGridView : System.Web.UI.WebControls.GridView
&lt;/p&gt;
&lt;p&gt;
Zatim je potrebno da na svaki red koji generiše osnovna&amp;nbsp; GridView klasa “zalepimo”
onclick javascript događaj (event handler). To radimo tako što promenimo OnRowDataBound
metodu iz osnovne klase. 
&lt;/p&gt;
&lt;p&gt;
1: protected override void OnRowDataBound(GridViewRowEventArgs e)&lt;br&gt;
2:&amp;nbsp;&amp;nbsp;{&lt;br&gt;
3:&amp;nbsp;&amp;nbsp;&amp;nbsp;base.OnRowDataBound(e);&lt;br&gt;
4:&lt;br&gt;
5:&amp;nbsp;&amp;nbsp;&amp;nbsp;if (e.Row.DataItem != null)&lt;br&gt;
6:&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
7:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.Row.Attributes.Add("OnClick", "msel(event)");&lt;br&gt;
8:&lt;br&gt;
9:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_id = this.PageIndex + "." + e.Row.RowIndex.ToString();&lt;br&gt;
10:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.Row.Attributes.Add("index", _id);&lt;br&gt;
11:&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
12:&amp;nbsp;&amp;nbsp;}
&lt;/p&gt;
&lt;p&gt;
Glavna stvar se nalazi u liniji 7, gde na Row element dodajemo atribut OnClick koji
će izvršavati msel(event) javascript funkciju na svaki klik. Javascript funkcija msel
registruje gde se izvršio click događaj i upisuje indeks kliknutog elementa u skriveno
(hidden) polje čiju vrednost ćemo kasnije, u postback-u, da parsiramo. Ovu funkciju
ćemo da kreiramo i registrujemo kasnije.&lt;br&gt;
Sledeća stvar se nalazi na linijama 9 i 10. Naime, tu kreiramo indeks elementa koji
je kliknut i vezujemo ga za sam element. Njegova konstrukcija je vrlo jednostavna,
“_id = broj stranice + tačka + indeks trenutnog reda”. Dobijeni indeks se upisuje
kao dodatni atribut u element koji predstavlja red u GridView-u.&lt;br&gt;
Da bi na klijentskoj strani znali koji red je izabran kreiramo Javascript funkciju
“msel“ koju ćemo kasije da registrujemo na strani (podvučeni delovi code-a se automatski
generišu u runtime-u).
&lt;/p&gt;
&lt;p&gt;
Pre nego što prokomentarišem javascript code, da kažem par reči o html code-u koji
generiše standardni GridView. GridView je u stvari obična tabela tj &amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...
konstrukcija. &amp;lt;tr&amp;gt; tag predstavlja red u našoj kontroli (Row) i na njega se
“lepi” OnClick event. Sam event se zapravo okida na &amp;lt;td&amp;gt; elementu ali se propagira
do prvog roditeljskog (parent) elementa koji ima handler tj definisan onclick a to
je &amp;lt;tr&amp;gt; element. I evo javascript-a koji se generiše.&lt;br&gt;
Da prokomentarišemo javascript.
&lt;/p&gt;
&lt;p&gt;
1:&amp;lt;script language="javascript"&amp;gt;&lt;br&gt;
2:&amp;nbsp;function msel(e, o)&lt;br&gt;
3:&amp;nbsp;{
&lt;/p&gt;
&lt;p&gt;
kreiramo referencu na skriveni (hidden) html element koji u sebi sadrži informacije
koji redovi su selektovani
&lt;/p&gt;
&lt;p&gt;
4:&amp;nbsp;&amp;nbsp;var selected = document.getElementById(o); 
&lt;/p&gt;
&lt;p&gt;
Zatim kreiramo referencu prema Event-u koji je inicirao izvršenje funkcije. Ova referenca
nam treba da bi saznali koji je objekat inicirao Event i da li je pri kliku bio pritisnut
taster CTRL. Linija 6 daje neposredni objekat koji je inicirao event, u ovom slučaju
&amp;lt;td&amp;gt; tj ćeliju koja se nalazi unutar &amp;lt;tr&amp;gt; elementa. Na liniji 7 hvatamo
sam &amp;lt;tr&amp;gt; element koji nosi informaciju o tome koji je indeks kliknutog elementa.
&lt;/p&gt;
&lt;p&gt;
5:&amp;nbsp;&amp;nbsp;e = e ? e : ((window.event) ? event : null);&lt;br&gt;
6:&amp;nbsp;&amp;nbsp;var obj = e.target ? e.target : ((e.srcElement) ? e.srcElement : null);&lt;br&gt;
7:&amp;nbsp;&amp;nbsp;obj = obj.parentElement ? obj.parentElement : obj.parentNode;&lt;br&gt;
8:&amp;nbsp;&amp;nbsp;var objParent = obj.parentElement ? obj.parentElement : obj.parentNode;
&lt;/p&gt;
&lt;p&gt;
Na linijama 9 i 10&amp;nbsp; kreiramo objekte String tipa koji redom nose podatke o izabranim
redovima i o trenutno kliknutom objektu tj njegovom indeksu. 
&lt;/p&gt;
&lt;p&gt;
9:&amp;nbsp;&amp;nbsp;var sel = new String(selected.value);&lt;br&gt;
10:&amp;nbsp;&amp;nbsp;var id = new String(obj.getAttribute("index"));&lt;br&gt;
11:&amp;nbsp;&amp;nbsp;var cssclass;&lt;br&gt;
12:&amp;nbsp;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Linija 13 ispituje da li je prilikom klika bio pritisnut i taster CTRL. Ukoliko jeste
na liniji 14 proveravamo da li je red već izabran. Ukoliko jeste, ukloni ga iz liste
izabranih i promeni css klasu za tekuću liniju. U suprotnom ubaci ga na listu izabranih
i promeni css klasu.
&lt;/p&gt;
&lt;p&gt;
13:&amp;nbsp;&amp;nbsp;if (e.ctrlKey) {&lt;br&gt;
14:&amp;nbsp;&amp;nbsp;&amp;nbsp;if (sel.indexOf("-" + id + "-") &amp;gt; -1) {&lt;br&gt;
15:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selected.value = sel.replace("-" + id + "-", "");&lt;br&gt;
16:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.className = "CssClassRow";&lt;br&gt;
17:&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
18:&amp;nbsp;&amp;nbsp;&amp;nbsp;else {&lt;br&gt;
19:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selected.value = sel + "-" + id + "-"; 
&lt;br&gt;
20:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.className = "CssClassRowSelected";&lt;br&gt;
21:&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
22:&amp;nbsp;&amp;nbsp;} 
&lt;/p&gt;
&lt;p&gt;
Ukoliko CTRL nije pritisnut (linija 23) lista izabranih indeksa svodi se na trenutno
izabran a css klase se menjaju tako da su svi objekti neselektovani.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
23:&amp;nbsp;&amp;nbsp;else { 
&lt;br&gt;
24:&amp;nbsp;&amp;nbsp;&amp;nbsp;if (sel.indexOf("-" + id + "-") &amp;gt; -1) { 
&lt;br&gt;
25:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cssclass = "CssClassRow"; selected.value = ""; 
&lt;br&gt;
26:&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
27:&amp;nbsp;&amp;nbsp;&amp;nbsp;else { 
&lt;br&gt;
28v&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cssclass = "CssClassRowSelected"; 
&lt;br&gt;
29:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selected.value = "-" + id + "-"; 
&lt;br&gt;
30:&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
31:&amp;nbsp;&amp;nbsp;&amp;nbsp;var trs = objParent.getElementsByTagName("tr");&lt;br&gt;
32:&amp;nbsp;&amp;nbsp;&amp;nbsp;for(i = 0; i &amp;lt; trs.length; i++) 
&lt;br&gt;
33:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trs[i].getAttribute("index"))&lt;br&gt;
34:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trs[i].className = "CssClassRow";obj.className =
cssclass;&lt;br&gt;
35:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
36:&amp;nbsp;&amp;nbsp;} 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;Napomena: podvučeni delovi se generišu
&lt;/p&gt;
&lt;p&gt;
Funkcija&amp;nbsp; disableSelection samo ne dozvoljava da se na kliknutim redovima izvrši
selekcija teksta. Za detalje pogledajte &lt;a href="http://www.dynamicdrive.com/dynamicindex9/noselect.htm"&gt;http://www.dynamicdrive.com/dynamicindex9/noselect.htm&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
37:&amp;nbsp;function disableSelection(target) { &amp;nbsp;&lt;br&gt;
38:&amp;nbsp;&amp;nbsp;if (typeof target.onselectstart!="undefined") &amp;nbsp;&amp;nbsp;&lt;br&gt;
39:&amp;nbsp;&amp;nbsp;&amp;nbsp;target.onselectstart=function(){return false;}; &amp;nbsp;&lt;br&gt;
40:&amp;nbsp;&amp;nbsp;else if (typeof target.style.MozUserSelect!="undefined")&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br&gt;
41:&amp;nbsp;&amp;nbsp;&amp;nbsp;target.style.MozUserSelect="none";&amp;nbsp; &amp;nbsp;&lt;br&gt;
42:&amp;nbsp;&amp;nbsp;else &amp;nbsp;&amp;nbsp;&lt;br&gt;
43:&amp;nbsp;&amp;nbsp;&amp;nbsp;target.onmousedown=function(){return false;}; &amp;nbsp;&lt;br&gt;
44:&amp;nbsp;&amp;nbsp;target.style.cursor = "default"; 
&lt;br&gt;
45:&amp;nbsp;} 
&lt;br&gt;
46:&amp;lt;/script&amp;gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
Ok, sledeća metoda koju menjamo u odnosu na originalnu GridView klasu je OnRowCreated. 
&lt;/p&gt;
&lt;p&gt;
1:protected override void OnRowCreated(GridViewRowEventArgs e)&lt;br&gt;
2:{&lt;br&gt;
3:&amp;nbsp;base.OnRowCreated(e);&lt;br&gt;
4:&lt;br&gt;
5:&amp;nbsp;_id = this.PageIndex + "." + e.Row.RowIndex.ToString();&lt;br&gt;
6:&lt;br&gt;
7:&amp;nbsp;if (selected != null &amp;amp;&amp;amp; selected.IndexOf("-" + _id + "-") &amp;gt; -1)&lt;br&gt;
8:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Row.CssClass = CssClassRowSelected;&lt;br&gt;
9:&amp;nbsp;else&lt;br&gt;
10:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Row.CssClass = CssClassRow;&lt;br&gt;
11:}
&lt;/p&gt;
&lt;p&gt;
Opet kreiramo indeks, linija 5, i ako je trenutni red u listi selektovanih onda mu
menjamo css klasu. 
&lt;/p&gt;
&lt;p&gt;
I na kraju menjamo CreateChildcontrols metodu. Zapravo samo je proširujemo. Cilj je
da između svakog postback-a očuvamo stanje selektovanih redova. 
&lt;/p&gt;
&lt;p&gt;
1:protected override void CreateChildControls()&lt;br&gt;
2:{
&lt;/p&gt;
&lt;p&gt;
Naravno pustimo da se kreiraju sve potrebne kontrole koje se kreiraju za GridView
(Linija 3)
&lt;/p&gt;
&lt;p&gt;
3:&amp;nbsp;base.CreateChildControls();&lt;br&gt;
4:&lt;br&gt;
5:&amp;nbsp;string[] selectedArray;&lt;br&gt;
6:&lt;br&gt;
7:&amp;nbsp;if (!string.IsNullOrEmpty(selected))&lt;br&gt;
8:&amp;nbsp;{
&lt;/p&gt;
&lt;p&gt;
Izdvojimo indekse redova selektovanih na client strani (linija 9.) .
&lt;/p&gt;
&lt;p&gt;
9:&amp;nbsp;&amp;nbsp;selectedArray = selected.Split('-');&lt;br&gt;
10:
&lt;/p&gt;
&lt;p&gt;
Kreiramo listu int vrednosti koja će sadržati indekse izabranih redova.
&lt;/p&gt;
&lt;p&gt;
11:&amp;nbsp;&amp;nbsp;SelectedIndexs = new List&amp;lt;int&amp;gt;();
&lt;/p&gt;
&lt;p&gt;
Kreiramo string niz koji će u sebi sadržati tekuću stranu i tekući index na strani.
&lt;/p&gt;
&lt;p&gt;
12:&amp;nbsp;&amp;nbsp;string[] pageAndIndex;
&lt;/p&gt;
&lt;p&gt;
Za svaki element u selectedArray a na osnovu stranice i indeksa preračunamo pravi
indeks i ubacimo u&amp;nbsp; SelectedIndexs.
&lt;/p&gt;
&lt;p&gt;
13:&amp;nbsp;&amp;nbsp;foreach (string s in selectedArray)&lt;br&gt;
14:&amp;nbsp;&amp;nbsp;{&lt;br&gt;
15:&amp;nbsp;&amp;nbsp;&amp;nbsp;if (s.Length &amp;gt; 0)&lt;br&gt;
16:&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
17:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pageAndIndex = s.Split('.');&lt;br&gt;
18:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SelectedIndexs.Add(int.Parse(pageAndIndex[0]) * this.PageSize
+ int.Parse(pageAndIndex[1]));&lt;br&gt;
19:&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
20:&amp;nbsp;&amp;nbsp;}&lt;br&gt;
21:&amp;nbsp;}&lt;br&gt;
22:
&lt;/p&gt;
&lt;p&gt;
Registrujemo skriveno html polje u koje upisujemo koji su izabrani redovi.
&lt;/p&gt;
&lt;p&gt;
23:&amp;nbsp;this.Page.ClientScript.RegisterHiddenField(selectedKey, selected);
&lt;/p&gt;
&lt;p&gt;
Registrujemo blok sa javascript funkcijama opisanim gore.
&lt;/p&gt;
&lt;p&gt;
24:&amp;nbsp;this.Page.ClientScript.RegisterClientScriptBlock( ( (System.Web.UI.WebControls.GridView)this).GetType(),
"MultiselectGridView_js", js);&lt;br&gt;
25:
&lt;/p&gt;
&lt;p&gt;
I na kraju na GridView kontrolu dodamo još jednu literal kontrolu koja u sebi sadrži
poziv funkcije&amp;nbsp; disableSelection koja ne dozvoljava da se selektuje tekst na
upravo kreiranoj kontroli.
&lt;/p&gt;
&lt;p&gt;
26:&amp;nbsp;Literal l = new Literal();&lt;br&gt;
27:&amp;nbsp;l.Text = "&amp;lt;script language=\"javacript\" type=\"text/javascript\"&amp;gt;disableSelection(document.getElementById(\""
+ this.ClientID + "\"));&amp;lt;/script&amp;gt;";&lt;br&gt;
28:&amp;nbsp;this.Controls.Add(l);&lt;br&gt;
29:}
&lt;/p&gt;
&lt;p&gt;
I to je to, kompletan code možete da skinete &lt;a href="http://www.vlatkovic.net/download/GridView_na_kvadrat.zip"&gt;ovde&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.vlatkovic.net/aggbug.ashx?id=28414adb-3fad-487c-a3b0-c32c1566b796" /&gt;</description>
      <comments>http://www.vlatkovic.net/CommentView,guid,28414adb-3fad-487c-a3b0-c32c1566b796.aspx</comments>
      <category>Programiranje;Programiranje/asp.net;Programiranje/c#</category>
    </item>
    <item>
      <trackback:ping>http://www.vlatkovic.net/Trackback.aspx?guid=255a9be2-18f0-4eb9-b683-eb71287e4614</trackback:ping>
      <pingback:server>http://www.vlatkovic.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.vlatkovic.net/PermaLink,guid,255a9be2-18f0-4eb9-b683-eb71287e4614.aspx</pingback:target>
      <dc:creator>Peca Vlatković</dc:creator>
      <wfw:comment>http://www.vlatkovic.net/CommentView,guid,255a9be2-18f0-4eb9-b683-eb71287e4614.aspx</wfw:comment>
      <wfw:commentRss>http://www.vlatkovic.net/SyndicationService.asmx/GetEntryCommentsRss?guid=255a9be2-18f0-4eb9-b683-eb71287e4614</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p style="margin-bottom: 0cm;">
Ljudi obožavaju da trpaje sve živo u web.config (uopšte u .config fajlove). To je
u principu ok ali ako naletite na projekat u kome ima preko stotinu raznih vrednosti
koje treba podesiti da bi radilo onda 'oće i muka da pripadne. E sad, od količine
ne može da se pobegne ali ako se ta količina organizuje i sistematizuje onda podešavanje
web.cofig-a i ne mora da bude tako mučna operacija. Ovo je moj skromni predlog kako
da se reši problem.
</p>
        <p style="margin-bottom: 0cm;">
Konfiguracioni fajlovi u .Net (web.config, app.config) podržavaju simpatičnu stvar
koja se zove &lt;configSections&gt;. Unutar ovih tagova možete proizvoljno da definišete
&lt;sectionGroups&gt; i &lt;section&gt; tagove. Ovo znači da možete da kreirate bilo
kakvu logičku strukturu podataka i svom .config fajlu. Pretpostavimo da radimo WEB
projekat koji u solution-u sadrži DAL (data access layer) projekat zadužen da komunicira
sa bazom i tumba podatke i BLL (business logic layer) koji sadrži neku poslovnu logiku
između DAL i WEB projekta.
</p>
        <p style="margin-bottom: 0cm;">
          <img alt="solExpl.gif" src="http://www.vlatkovic.net/content/binary/solExpl.gif" border="0" height="454" width="252" />
          <br />
          <br />
Svaki od ovih projekata može potencijalno da vuče vrednosti iz konfiguracionog fajla.
Na primer, očigledno je da DAL projektu (onaj što se igra sa bazom) treba string koji
mu govori gde je baza podataka i koju bazu gađa. Ili, projektu BLL onaj koji sadrži
neku logiku treba podatak sa kog web servisa recimo da vuče neke podatke. Da te tražene
vrednosti ne stoje samo kao lista poželjno je da napravimo strukturu koja će odražavati
našu logičku organizaciju. I evo primera kako može da izgleda:
</p>
        <p style="margin-bottom: 0cm;">
          <br />
        </p>
        <p style="margin-bottom: 0cm;">
Ovako počinje web.config
</p>
        <p>
          <span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">&lt;configSections&gt;<br />
        &lt;sectionGroup name=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"VlatkovicNET.TestApp"</span>&gt;<br />
            &lt;!-- Common
--&gt;<br />
            &lt;section
name=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"CommonApp"</span> type=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"System.Configuration.NameValueSectionHandler"</span>/&gt;<br />
            &lt;!-- Util
--&gt;<br />
            &lt;section
name=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"Util"</span> type=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"System.Configuration.NameValueSectionHandler"</span>/&gt;<br />
            &lt;sectionGroup
name=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"DAL"</span>&gt;<br />
                &lt;section
name=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"ConnectionStrings"</span> type=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"System.Configuration.NameValueSectionHandler"</span>/&gt;<br />
                &lt;section
name=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"StoragePaths"</span> type=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"System.Configuration.NameValueSectionHandler"</span>/&gt;<br />
                &lt;section
name=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"XMLStorage"</span> type=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"System.Configuration.NameValueSectionHandler"</span>/&gt;<br />
            &lt;/sectionGroup&gt;<br />
            &lt;sectionGroup
name=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"BLL"</span>&gt;<br />
                &lt;section
name=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"WebServices"</span> type=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"System.Configuration.NameValueSectionHandler"</span>/&gt;<br />
                &lt;section
name=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"CacheServers"</span> type=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"System.Configuration.NameValueSectionHandler"</span>/&gt;<br />
            &lt;/sectionGroup&gt;<br />
        &lt;/sectionGroup&gt;<br />
    &lt;/configSections&gt;</span>
        </p>
        <p style="margin-bottom: 0cm;">
Šta ovde imamo? Prvi blok “definicija sekcija početak” odnosi se na kreiranje strukture
podataka koja će se upisati u .config fajl. Poželjno je da struktura konfiguracije
prati strukturu aplikacije. &lt;configSections&gt; definiše grupu koja nosi ime sastavljeno
od imena Namespace-a i imena projekta “VlatkovicNET.TestApp” koja u sebi pak definiše
grupe koje će da sadrže podešavanja karakteristična za BLL i DAL projekte. Type=”System.Configuration.NameValueSectionHandler”
unutar definicije sekcija govori koji handler će da obrađuje našu strukturu parova.
U ovom slučaju to je .NET handler NameValueSectionHandler . Možete da pišete i svoj
ali to nije predmet ovog teksta. I još jedna napomena, struktura ovde nema nikakve
veze sa funkcionalnošću već samo sa organizacijom i preglednošću.
</p>
        <p style="margin-bottom: 0cm;">
Sledeći blok su same definicije vrednosti za prethodno definisanu strukturu. Na primer:
</p>
        <p>
          <span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    &lt;VlatkovicNET.TestApp&gt;<br />
        &lt;CommonApp&gt;<br />
            &lt;add key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"CompanyName"</span> value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"VlatkovicNET"</span>&gt;&lt;/add&gt;<br />
            &lt;add key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"ContactEmail"</span> value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"pera@test.com"</span>&gt;&lt;/add&gt;<br />
            &lt;add key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"SmtpServer"</span> value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"127.0.0.1"</span>&gt;&lt;/add&gt;<br />
        &lt;/CommonApp&gt;<br />
        &lt;Util&gt;<br />
            &lt;add key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"HelpUrl"</span> value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"http://www.helpme.com"</span>&gt;&lt;/add&gt;<br />
            &lt;add key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"Language"</span> value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"en"</span>&gt;&lt;/add&gt;<br />
        &lt;/Util&gt;<br />
        &lt;DAL&gt;<br />
            &lt;ConnectionStrings&gt;<br />
                &lt;add
key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"MSSql"</span>    value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"..."</span>&gt;&lt;/add&gt;<br />
                &lt;add
key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"MySql"</span>    value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"..."</span>&gt;&lt;/add&gt;<br />
                &lt;add
key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"Oracle"</span>    value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"..."</span>&gt;&lt;/add&gt;<br />
            &lt;/ConnectionStrings&gt;<br />
            &lt;StoragePaths&gt;<br />
                &lt;add
key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"Images"</span>    value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"..."</span>&gt;&lt;/add&gt;<br />
                &lt;add
key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"Docs"</span>    value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"..."</span>&gt;&lt;/add&gt;<br />
            &lt;/StoragePaths&gt;<br />
            &lt;XMLStorage&gt;<br />
                &lt;add
key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"path1"</span>    value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"..."</span>&gt;&lt;/add&gt;<br />
                &lt;add
key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"path2"</span>    value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"..."</span>&gt;&lt;/add&gt;<br />
                &lt;add
key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"path3"</span>    value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"..."</span>&gt;&lt;/add&gt;                         
<br />
            &lt;/XMLStorage&gt;<br />
        &lt;/DAL&gt;<br />
        &lt;BLL&gt;<br />
            &lt;WebServices&gt;<br />
                &lt;add
key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"service1"</span> value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"http://server1/service1.asmx"</span> &gt;&lt;/add&gt;<br />
                &lt;add
key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"service2"</span> value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"http://server1/service2.asmx"</span>&gt;&lt;/add&gt;<br />
            &lt;/WebServices&gt;<br />
            &lt;CacheServers&gt;<br />
                &lt;add
key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"server1"</span> value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"cacheServer1"</span> &gt;&lt;/add&gt;<br />
                &lt;add
key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"server2"</span> value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"cacheServer2"</span>&gt;&lt;/add&gt;<br />
            &lt;/CacheServers&gt;<br />
        &lt;/BLL&gt;<br />
    &lt;/VlatkovicNET.TestApp&gt;</span>
        </p>
        <p style="margin-bottom: 0cm;" lang="en-US">
Primer:
</p>
        <p>
          <span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">&lt;VlatkovicNET.TestApp&gt;<br />
   &lt;DAL&gt;<br />
      &lt;ConnectionStrings&gt;<br />
         &lt;add key=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"MSSql"</span> value=<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"..."</span>&gt;&lt;/add&gt;</span>
          <br />
        </p>
        <p style="margin-bottom: 0cm;">
unutar projekta DAL koji pripada namespace-u VlatkovicNET.TestApp definišemo grupu
ConnectionStrings koja sadrži vrednost za MSSql connection string.
</p>
        <p style="margin-bottom: 0cm;">
          <br />
        </p>
        <p style="margin-bottom: 0cm;">
Sada ostaje da samo pročitamo ove vrednosti iz .config fajla. Jednostavno, pošto je
.config xml file dovoljno je da definišemo XPath izraz do svakog ključa (key) a njegova
vrednost je value iz NameValue para koga ćemo da čitamo. Ako niste bliski sa XPath-om
nedajte da vas to obeshrabri, bar u ovom slučaju on je jako jednostavan a i nije loše
da se nešto novo nauči (brrr ne sviđa mi se ova rečenica, učite ono što volite). So,
evo ga primer:
</p>
        <p style="margin-bottom: 0cm;">
          <br />
        </p>
        <p style="margin-bottom: 0cm;">
Prvo definišemo metode za dobijanje vrednosti:
</p>
        <p>
          <span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">public</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">class</span> ConfigurationManager<br />
    {<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">private</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">static</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">object</span> lock_GetIntFromConfig <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">object</span>();<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Gets the int from config.</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;param name="path2Key"&gt;The path to key.&lt;/param&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;param name="key"&gt;The key.&lt;/param&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;param name="defaultValue"&gt;The default value.&lt;/param&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;returns&gt;&lt;/returns&gt;</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">public</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">static</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> GetIntFromConfig(<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> path2Key, <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> key, <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> defaultValue)<br />
        {<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">lock</span> (lock_GetIntFromConfig)<br />
            {<br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> val <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> GetValueFromConfig(path2Key,
key);<br /><br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (val
!<span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>)<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>.TryParse(val, <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">out</span> defaultValue);<br /><br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> defaultValue;<br />
            }<br />
        }<br /><br /><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">private</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">static</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">object</span> lock_GetDecimalFromConfig <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">object</span>();<br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Gets the decimal from config.</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;param name="path2Key"&gt;The path to key.&lt;/param&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;param name="key"&gt;The key.&lt;/param&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;param name="defaultValue"&gt;The default value.&lt;/param&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;returns&gt;&lt;/returns&gt;</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">public</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">static</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">decimal</span> GetDecimalFromConfig(<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> path2Key, <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> key, <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">decimal</span> defaultValue)<br />
        {<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">lock</span> (lock_GetDecimalFromConfig)<br />
            {<br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> val <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> GetValueFromConfig(path2Key,
key);<br /><br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (val
!<span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>)<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">decimal</span>.TryParse(val, <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">out</span> defaultValue);<br /><br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> defaultValue;<br />
            }<br />
        }<br /><br /><br /><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">private</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">static</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">object</span> lock_GetValueFromConfig <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">object</span>();<br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Gets the value from config.</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;param name="path2Key"&gt;The path to key.&lt;/param&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;param name="key"&gt;The key.&lt;/param&gt;</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;returns&gt;&lt;/returns&gt;</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">public</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">static</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> GetValueFromConfig(<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> path2Key, <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> key)<br />
        {<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">lock</span> (lock_GetValueFromConfig)<br />
            {<br />
                NameValueCollection
nvc <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> (NameValueCollection)ConfigurationSettings.GetConfig(path2Key);<br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (nvc
!<span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>)<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> nvc[key];<br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">else</span><br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>;<br />
            }<br />
        }<br />
    }</span>
        </p>
        <p style="margin-bottom: 0cm;">
Primer: vraćanje vrednosti specifičnog connection stringa za projekat<br /><font face="Courier New, monospace"><font style="font-size: 8pt;" size="1">GetValueFromConfig("VlatkovicNET.TestApp/DLL/ConnectionStrings",
"MSSql");</font></font></p>
        <p style="margin-bottom: 0cm;" lang="en-US">
Primer: direktno uzimanje int vrednosti iz .config-a<br /><font face="Courier New, monospace"><font style="font-size: 8pt;" size="1">GetIntFromConfig("VlatkovicNET.TestApp/BLL/Timeouts",
"Cache", 5)</font></font></p>
        <p style="margin-bottom: 0cm;" lang="en-US">
Kao što vidite XPath izraz se piše jednostavno, sa znakom “/” odvajate grupe i dodajete
sekciju na kraju. I metodama prosledite XPath i key koji obeležava vrednost.
</p>
        <p style="margin-bottom: 0cm;" lang="en-US">
Metode ispisane ovde možete po želji da stavite u osnovnu klasu za vaše strane i kontrole
ili u neki zaseban framework koji ćete da vučete sa sobom gde god da krenete. <a href="http://www.vlatkovic.net/download/primer.config.zip">Ovde</a> možete
da skinete primer cele aplikacije pa da pogledate. Primer je samo ilustracija, nije
reprezentativan :-) Primer možete da proširujete normalno pa da recimo kreirate malli
generator klase koja opisuje vašu konfiguraciju u .config fajlu. Gledaću da u budućnosti
napišem pravi generator sa code DOM.
</p>
        <p style="margin-bottom: 0cm;">
Za kraj, nadam se da nisam izmislio toplu vodu i udavio vas u njoj :-) I da ne zaboravim,
zahvaljujem se gospodinu <a href="http://www.compilers.net">Dejanu Miličiću</a> na
recenziji i više nego korisnim savetima.<br /></p>
        <p style="margin-bottom: 0cm;">
          <a href="http://www.vlatkovic.net/download/primer.config.zip">Primer code-a</a>
        </p>
        <img width="0" height="0" src="http://www.vlatkovic.net/aggbug.ashx?id=255a9be2-18f0-4eb9-b683-eb71287e4614" />
      </body>
      <title>Kamenolom iliti krševiti .config</title>
      <guid isPermaLink="false">http://www.vlatkovic.net/PermaLink,guid,255a9be2-18f0-4eb9-b683-eb71287e4614.aspx</guid>
      <link>http://www.vlatkovic.net/2007/12/22/Kamenolom+Iliti+Kr%c5%a1eviti+Config.aspx</link>
      <pubDate>Sat, 22 Dec 2007 12:52:10 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
Ljudi obožavaju da trpaje sve živo u web.config (uopšte u .config fajlove). To je
u principu ok ali ako naletite na projekat u kome ima preko stotinu raznih vrednosti
koje treba podesiti da bi radilo onda 'oće i muka da pripadne. E sad, od količine
ne može da se pobegne ali ako se ta količina organizuje i sistematizuje onda podešavanje
web.cofig-a i ne mora da bude tako mučna operacija. Ovo je moj skromni predlog kako
da se reši problem.
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
Konfiguracioni fajlovi u .Net (web.config, app.config) podržavaju simpatičnu stvar
koja se zove &amp;lt;configSections&amp;gt;. Unutar ovih tagova možete proizvoljno da definišete
&amp;lt;sectionGroups&amp;gt; i &amp;lt;section&amp;gt; tagove. Ovo znači da možete da kreirate bilo
kakvu logičku strukturu podataka i svom .config fajlu. Pretpostavimo da radimo WEB
projekat koji u solution-u sadrži DAL (data access layer) projekat zadužen da komunicira
sa bazom i tumba podatke i BLL (business logic layer) koji sadrži neku poslovnu logiku
između DAL i WEB projekta.
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
&lt;img alt="solExpl.gif" src="http://www.vlatkovic.net/content/binary/solExpl.gif" border="0" height="454" width="252"&gt;
&lt;br&gt;
&lt;br&gt;
Svaki od ovih projekata može potencijalno da vuče vrednosti iz konfiguracionog fajla.
Na primer, očigledno je da DAL projektu (onaj što se igra sa bazom) treba string koji
mu govori gde je baza podataka i koju bazu gađa. Ili, projektu BLL onaj koji sadrži
neku logiku treba podatak sa kog web servisa recimo da vuče neke podatke. Da te tražene
vrednosti ne stoje samo kao lista poželjno je da napravimo strukturu koja će odražavati
našu logičku organizaciju. I evo primera kako može da izgleda:
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
Ovako počinje web.config
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;lt;configSections&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sectionGroup name=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"VlatkovicNET.TestApp"&lt;/span&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Common
--&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;section
name=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"CommonApp"&lt;/span&gt; type=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"System.Configuration.NameValueSectionHandler"&lt;/span&gt;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Util
--&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;section
name=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"Util"&lt;/span&gt; type=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"System.Configuration.NameValueSectionHandler"&lt;/span&gt;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sectionGroup
name=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"DAL"&lt;/span&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;section
name=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"ConnectionStrings"&lt;/span&gt; type=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"System.Configuration.NameValueSectionHandler"&lt;/span&gt;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;section
name=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"StoragePaths"&lt;/span&gt; type=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"System.Configuration.NameValueSectionHandler"&lt;/span&gt;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;section
name=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"XMLStorage"&lt;/span&gt; type=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"System.Configuration.NameValueSectionHandler"&lt;/span&gt;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/sectionGroup&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sectionGroup
name=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"BLL"&lt;/span&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;section
name=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"WebServices"&lt;/span&gt; type=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"System.Configuration.NameValueSectionHandler"&lt;/span&gt;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;section
name=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"CacheServers"&lt;/span&gt; type=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"System.Configuration.NameValueSectionHandler"&lt;/span&gt;/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/sectionGroup&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/sectionGroup&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configSections&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
Šta ovde imamo? Prvi blok “definicija sekcija početak” odnosi se na kreiranje strukture
podataka koja će se upisati u .config fajl. Poželjno je da struktura konfiguracije
prati strukturu aplikacije. &amp;lt;configSections&amp;gt; definiše grupu koja nosi ime sastavljeno
od imena Namespace-a i imena projekta “VlatkovicNET.TestApp” koja u sebi pak definiše
grupe koje će da sadrže podešavanja karakteristična za BLL i DAL projekte. Type=”System.Configuration.NameValueSectionHandler”
unutar definicije sekcija govori koji handler će da obrađuje našu strukturu parova.
U ovom slučaju to je .NET handler NameValueSectionHandler . Možete da pišete i svoj
ali to nije predmet ovog teksta. I još jedna napomena, struktura ovde nema nikakve
veze sa funkcionalnošću već samo sa organizacijom i preglednošću.
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
Sledeći blok su same definicije vrednosti za prethodno definisanu strukturu. Na primer:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;VlatkovicNET.TestApp&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;CommonApp&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"CompanyName"&lt;/span&gt; value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"VlatkovicNET"&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"ContactEmail"&lt;/span&gt; value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"pera@test.com"&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"SmtpServer"&lt;/span&gt; value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"127.0.0.1"&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/CommonApp&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Util&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"HelpUrl"&lt;/span&gt; value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"http://www.helpme.com"&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"Language"&lt;/span&gt; value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"en"&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Util&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DAL&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ConnectionStrings&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"MSSql"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"..."&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"MySql"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"..."&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"Oracle"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"..."&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/ConnectionStrings&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;StoragePaths&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"Images"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"..."&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"Docs"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"..."&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/StoragePaths&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;XMLStorage&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"path1"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"..."&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"path2"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"..."&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"path3"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"..."&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/XMLStorage&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/DAL&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;BLL&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;WebServices&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"service1"&lt;/span&gt; value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"http://server1/service1.asmx"&lt;/span&gt; &amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"service2"&lt;/span&gt; value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"http://server1/service2.asmx"&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/WebServices&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;CacheServers&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"server1"&lt;/span&gt; value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"cacheServer1"&lt;/span&gt; &amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add
key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"server2"&lt;/span&gt; value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"cacheServer2"&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/CacheServers&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/BLL&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/VlatkovicNET.TestApp&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;" lang="en-US"&gt;
Primer:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;lt;VlatkovicNET.TestApp&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;DAL&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ConnectionStrings&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add key=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"MSSql"&lt;/span&gt; value=&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"..."&lt;/span&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
unutar projekta DAL koji pripada namespace-u VlatkovicNET.TestApp definišemo grupu
ConnectionStrings koja sadrži vrednost za MSSql connection string.
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
Sada ostaje da samo pročitamo ove vrednosti iz .config fajla. Jednostavno, pošto je
.config xml file dovoljno je da definišemo XPath izraz do svakog ključa (key) a njegova
vrednost je value iz NameValue para koga ćemo da čitamo. Ako niste bliski sa XPath-om
nedajte da vas to obeshrabri, bar u ovom slučaju on je jako jednostavan a i nije loše
da se nešto novo nauči (brrr ne sviđa mi se ova rečenica, učite ono što volite). So,
evo ga primer:
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
Prvo definišemo metode za dobijanje vrednosti:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;public&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;class&lt;/span&gt; ConfigurationManager&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;private&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;static&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;object&lt;/span&gt; lock_GetIntFromConfig &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;object&lt;/span&gt;();&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Gets the int from config.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;param name="path2Key"&amp;gt;The path to key.&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;param name="key"&amp;gt;The key.&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;param name="defaultValue"&amp;gt;The default value.&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;public&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;static&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; GetIntFromConfig(&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; path2Key, &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; key, &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; defaultValue)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;lock&lt;/span&gt; (lock_GetIntFromConfig)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; val &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; GetValueFromConfig(path2Key,
key);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (val
!&lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;.TryParse(val, &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;out&lt;/span&gt; defaultValue);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; defaultValue;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;private&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;static&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;object&lt;/span&gt; lock_GetDecimalFromConfig &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;object&lt;/span&gt;();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Gets the decimal from config.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;param name="path2Key"&amp;gt;The path to key.&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;param name="key"&amp;gt;The key.&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;param name="defaultValue"&amp;gt;The default value.&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;public&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;static&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;decimal&lt;/span&gt; GetDecimalFromConfig(&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; path2Key, &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; key, &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;decimal&lt;/span&gt; defaultValue)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;lock&lt;/span&gt; (lock_GetDecimalFromConfig)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; val &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; GetValueFromConfig(path2Key,
key);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (val
!&lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;decimal&lt;/span&gt;.TryParse(val, &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;out&lt;/span&gt; defaultValue);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; defaultValue;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;private&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;static&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;object&lt;/span&gt; lock_GetValueFromConfig &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;object&lt;/span&gt;();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Gets the value from config.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;param name="path2Key"&amp;gt;The path to key.&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;param name="key"&amp;gt;The key.&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;public&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;static&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; GetValueFromConfig(&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; path2Key, &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; key)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;lock&lt;/span&gt; (lock_GetValueFromConfig)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NameValueCollection
nvc &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; (NameValueCollection)ConfigurationSettings.GetConfig(path2Key);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (nvc
!&lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; nvc[key];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;else&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
Primer: vraćanje vrednosti specifičnog connection stringa za projekat&lt;br&gt;
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size: 8pt;" size="1"&gt;GetValueFromConfig("VlatkovicNET.TestApp/DLL/ConnectionStrings",
"MSSql");&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;" lang="en-US"&gt;
Primer: direktno uzimanje int vrednosti iz .config-a&lt;br&gt;
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size: 8pt;" size="1"&gt;GetIntFromConfig("VlatkovicNET.TestApp/BLL/Timeouts",
"Cache", 5)&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;" lang="en-US"&gt;
Kao što vidite XPath izraz se piše jednostavno, sa znakom “/” odvajate grupe i dodajete
sekciju na kraju. I metodama prosledite XPath i key koji obeležava vrednost.
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;" lang="en-US"&gt;
Metode ispisane ovde možete po želji da stavite u osnovnu klasu za vaše strane i kontrole
ili u neki zaseban framework koji ćete da vučete sa sobom gde god da krenete. &lt;a href="http://www.vlatkovic.net/download/primer.config.zip"&gt;Ovde&lt;/a&gt; možete
da skinete primer cele aplikacije pa da pogledate. Primer je samo ilustracija, nije
reprezentativan :-) Primer možete da proširujete normalno pa da recimo kreirate malli
generator klase koja opisuje vašu konfiguraciju u .config fajlu. Gledaću da u budućnosti
napišem pravi generator sa code DOM.
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
Za kraj, nadam se da nisam izmislio toplu vodu i udavio vas u njoj :-) I da ne zaboravim,
zahvaljujem se gospodinu &lt;a href="http://www.compilers.net"&gt;Dejanu Miličiću&lt;/a&gt; na
recenziji i više nego korisnim savetima.&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
&lt;a href="http://www.vlatkovic.net/download/primer.config.zip"&gt;Primer code-a&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.vlatkovic.net/aggbug.ashx?id=255a9be2-18f0-4eb9-b683-eb71287e4614" /&gt;</description>
      <comments>http://www.vlatkovic.net/CommentView,guid,255a9be2-18f0-4eb9-b683-eb71287e4614.aspx</comments>
      <category>Programiranje;Programiranje/c#</category>
    </item>
  </channel>
</rss>