Vrednost property-a, ki kaže na drug objekt

Imam dve svoji komponenti: TTable in TEdit.

Sedaj pa bi rad na formi na moji komponenti TEdit izbral TTable.

Na TEdit sem ustvari public property tipa TTable, vendar tega objekta nisem kreiral. Vse lepo in prav. (Skoraj) Dam TTable na formo, dam TEdit na formo, lahko izberem na TEdit-u en TTable, izbiram lahko med usemi TTable-i ki so na formi, in potem dobim plusek na temu property-u in lahko gledam in nastavljam property-e TTable-u kar na TEdit-u, vendar ko dam BUILD, mi javi:

Error    1    Cannot create an object of type 'TTable' from its string representation 'TTable1' for the 'Table' property.    D:\projekti.NET\Test\Testi\Grid.aspx    10   

Seveda, saj je v aspx datoteki: <cc2:TEdit ID="TEdit1" runat="server" Table="TTable1">

Mi zna kdo pomagati pri tem? Po mojem obstaja kakšen [.....] pred property-jem, vendar sem gledal, pa se mi po imenu nobeden ne zdi logičen.
 

Avtor: fora, objavljeno na portalu SloDug.si (Arhiv)

Leave a comment

Please note that we won't show your email to others, or use it for sending unwanted emails. We will only use it to render your Gravatar image and to validate you as a real person.

o-MA-n-tjaz
o-MA-n-tjaz - torek, 23. januar 2007

Ja sedaj se pa razumemo. Bi prosil za kodo če je možno.Hvala in lep dan &scaron;e naprej.&nbsp;

bojanv
bojanv - torek, 23. januar 2007

Kontrola ima metodo FindControl (ki je zelo koristna), s katero lahko i&scaron;čem v Control Tree-ju v kontroli. Se pa strinjam s izjavo Pril-a, kar je povedal.Če bo&scaron; na SloDug-u, me potegni za rokav pa bova kako rekla na to temo....če te pa ne bo, pa povej pa ti prilepim par vrstic kode.... Si malce pred mano dal odgovor pa sem &scaron;ele zdaj videl. Razumem, kaj hoče&scaron; narest. Ti bi rad preko designerja nastavil TTable in pole z njo počel, karkoli že ma&scaron; namenjeno, zdaj te pa zanima, kako to nardit, da lahko ti&nbsp;nastavi&scaron; objekt, ki je na strani. Al sem te spet narobe razumel?

o-MA-n-tjaz
o-MA-n-tjaz - torek, 23. januar 2007

Ja FindControl bo vredu, če sem prav razumel, vendar se &scaron;e vedno nismo razumeli.Jaz vržem na webFormo TTable in TGrid. Sedaj pa nebi rad v TGrid property TTableID vpisal na roke njegov string, da bom potem lahko v TGrid metodi na render se skliceval na njo, ampak bi rad ta TTable v property-u TGrid.TTableID izbrol z dropDown menijem. Tako da bi tm pri strani dal dropDown in bi mi zlistal use TTable, ki so na strani.Sej načeloma bi lahko tudi na roke vpisal tisti bogi ID, vendar jest tega nočem, ampak hočem da moram na WebFormi ibrat ga iz DropDown menija. Tako ne more priti do napake.&nbsp;

pril
pril - torek, 23. januar 2007

Page.FindControl(imeKontrole) vrne referenco na kontrolo z id-jem imeKontrole. Pogoj je, da je kontrola že na strani (page objekt), kar seveda nekoč (v nekem delu izvajanja)&nbsp;zanesljivo je, če hoče&scaron;, da se uporabniku prikaže na web strani (ali pa web servisu ipd). Kakor sem razumel, želi&scaron;&nbsp;s stringom določit nek objekt (referenco oziroma točno določeno instanco). To ne gre,&nbsp;s stringom lahko določi&scaron; samo string - to je zgolj podatek, ki je v vsakem primeru tipa string.To je npr id kontrole, lahko pa je to tudi katera druga lastnost, na podlagi katere lahko potem enolično določi&scaron; (npr. najde&scaron; po id-ju z uporabo&nbsp;findControl) objekt in nato na enega od načinov dobi&scaron; njegovo referenco (findControl funkcija že takoj vrne referenco). Se mi zdi da je Page.FindControl&nbsp; zato najbolj enostavna, je pa seveda &scaron;e kar nekaj drugih možnosti. No, s stringom lahko določi&scaron; tudi integer, double in druge objekte, vendar je to samo podatek, ki se v nekem delu izvajanja konventira v pravilen tip objekta, ni pa to referenca&nbsp;objekta.Uh,&nbsp;upam da sem&nbsp;bil&nbsp;razumljiv???lp, pl

o-MA-n-tjaz
o-MA-n-tjaz - torek, 23. januar 2007

Tegale &scaron;e vedno ne razumem. Imam dve kontroli, ki dedujeta iz System.Web.UI.Control in bi rad na eni izbral drugo kontrolo (property). Ne razumem, kaj ima to povezave z Page.FindControl, saj se propery ne tiče nič Page (ta dva objekta nič ne vesta o Page). Če napi&scaron;em propety na prvi kontroli (npr. Grid), ki kaže na drugo komponento TTable takole:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Category(&quot;Data&quot;)]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public TTable Table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_Table;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_Table = value;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;je vse parav in dobro, tudi potem ko na Page na Gridu nastavim property, ki &quot;kaže&quot; na komponento TTable. Ko pa dam projekt buildat pa mi javi napako:Cannot create an object of type &#39;TTable&#39; from its string representation &#39;TTable1&#39; for the &#39;Table&#39; property.&nbsp;

bojanv
bojanv - petek, 19. januar 2007

Men&nbsp;so v&scaron;eč take re&scaron;itve s templated kontrolami&nbsp; Se mi zdijo elegantne in uporabne.&nbsp;Vsak ma svoj način dela..Lahko naredi&scaron; s to finto, da z find control nardi&scaron;. Lahko pa uporabi&scaron; reflection, samo jz bi se tega izogibal. V asp.net ma&scaron; druge mehanizme zato. Bi &scaron;e pa komentiral na&nbsp;odgovor&nbsp;fora-e. Tisto, kar ti posku&scaron;a&scaron; narediti, lahko naredi&scaron; na 2 načina. Prvi je, da ima&scaron; odprt property, kjer določi&scaron; instanco &quot;podkontrole&quot;.&nbsp;V codenehind-u potem to instanco naloži&scaron; (property get/set)&nbsp;in v drugi kontroli to uporabi&scaron; (preverja&scaron; z is operatorjem). Varianta DataSource. Druga je pa varianta DataSourceID, kjer nastavi&scaron; id kontrole, ki jo mora&scaron; pa potem z eventi na strani pohendlat, da se ti prava instanca poveže. Najbolj&scaron;e re&scaron;i&scaron; to tako, da override-a&scaron; DataBind od kontrole, potem pa poskrbi&scaron;, da se ti instanca priredi. Seveda je pogoj, da se ti pokliče DataBind na page-u (pokliče se DataBind na child-ih), kar razre&scaron;i&scaron; globalno tako, da implementira&scaron; svoj razred page, kjer nastavi&scaron; instance, poveže&scaron; kontrole v Init eventu, ... lahko pa se poigra&scaron; in implementira&scaron; handler, ki pa posega v page procesiranje, torej PageHandler.Tebi fora tisto ne deluje, ker hoče&scaron; objektu podturit string, on pa hoče objekt tipa TTable. Poskusi drugo varianto, ki sem jo zgoraj navedel pa bo &scaron;lo. Ma&scaron; tudi dost člankov na to temo, samo nimam jih v bookmarkih, za iskanje pa nimam časa.....

pril
pril - petek, 19. januar 2007

tole, na hitro in na pamet, verjetno pa je zato kak&scaron;na napakica, ampak mislim da bo jasnoclass TEditpublic TTable as TTablesub OnNekEvent(e)Dim najdenaKontrola As System.Web.UI.Control = Page.FindControl(&quot;TTable1&quot;) If Not IsNothing(najdenaKontrola ) ThenTTable= ctype(najdenaKontrola,TTable) end ifend sub &nbsp;end class

fora
fora - petek, 19. januar 2007

Em medtem, ko sem pisal prej&scaron;nje sporočilo je odgovoril &scaron;e uporabnik pril. Po mojem je to to, kar rabim ja? Mi lahko pove&scaron; en stavek več, kako doseči to.&Scaron;e vedno nisem prepričan, če je to to, kar rabim, vendar če s tem lahko dosežem, kar sem napisal v prej&scaron;njem MSG-ju potem je to to.&nbsp;

fora
fora - petek, 19. januar 2007

Em po mojem, če sem te prav razumel, se nisva razumela. Rad bi naredil isti učinek, kot ga ima devexpress za Grid in DataController.Grid ima property DataSourceID in tega lahko nastavi&scaron; na katero koli komponento ASPxDataController, ki je na formi.Za tiste, ki ne poznate komponent od devexpressa, pa nekako takole:Na formo bi dal TTable. Potem bi dal na formo &scaron;e TEdit. Potem pa bi rad na formi nekako tedva povezal, zato da bi lahko na TEdit-u klical neko metodo na TTable-u, ki bi nekaj vračala.Tistle Container po mojem ni to, kar rabim.&nbsp;

pril
pril - petek, 19. januar 2007

Če razumem prav se mi zdi to malo komplicirano; kaj pa če bi uporabil kar findControl pa najden objekt z id-jem TEdit1 potem kar priredi&scaron;&nbsp;prednastavljeni lastnosti? Al pa z reflection objektom?&nbsp;lp, pl

bojanv
bojanv - petek, 19. januar 2007

Mogoče bom zgre&scaron;il tvoj namen, ampak sodeč po kodi mislim, da i&scaron;če&scaron; templated control. Ideja templated control je v tem, naredi&scaron; za svojo kontrolo (TEdit) container, kamor bo&scaron; dajal TTable-e. Za te table bo&scaron; pa lahko potem spreminjal property-e, klical metode, itd.Kliče&scaron; pa lahko pole takole:&lt;cc2:TEdit id=&quot;TEdit1&quot; runat=&quot;server&quot; &gt;&nbsp;&nbsp;&nbsp; &lt;Tables&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cc1:TTable id=&quot;neki&quot; nekaLastnost=&lt;%#Container.NekaLastnost%&gt; /&gt;&nbsp;&nbsp;&nbsp; &lt;/Tables&gt;&lt;/cc2:TEdit&gt;Recimo, postopek:naredi&scaron; dll projekt, doda&scaron; referenco na System.Web.dll. implementira&scaron; interface INamingContainerimplementira&scaron; attribute ParseChildren (zato, da se vsebina prevede kot kontrola)property-e, ki jih nastavlja&scaron;, jim dodaj PersistanceMode na InnerProperty in TemplateContainer na ime INamingContainer-japrekrije&scaron; override, da se pokliče EnsureChildrenna koncu pa &scaron;e prekrije&scaron; metodo CreateChildrenControls, da se pokliče InstanteIn v container-juLahko ti pa tudi kak primer napi&scaron;em, če želi&scaron;......