09. maj 2006 - 10:53Der er
20 kommentarer og 1 løsning
Hent gridview
Hej, Jeg har en user control i et formview. Fra min user control vil jeg gerne have fat i GridView1 og hente SelectedDataKey.Value, men det driller sgu en del :(
Fra min usercontrol siger jeg Dim GridView1 As GridView = DirectCast(Me.FindControl("GridView1 "), GridView)
Men jeg kan ikke få fat i GridView1 fra user controlen, nogen som ved hvordan man gør det?
Fra usercontrolen, som er i et formview, prøver jeg at hive fat i gridview1 ved at skrive: Dim GridView1 As GridView = DirectCast(Me.Page.FindControl("GridView1 "), GridView)
Men jeg skal vel ikke dim'e formview'et eftersom jeg burde have direkte fat i siden, eller?
Det gør ikke den store forskel ... hvis du på formen har indsat et GridView med id'et GridView1 - så skal Page-klassens implementering af FindControl kunne finde det. Du kan bare sende mig de bidder af koden der er relevante. Mvh
Protected Sub SubmitButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
'Upload filer ...
'Hent SelectedDataKey fra WineYardsGridView (Det som tidligere hed gridview1) Dim WineYardsGridView As GridView = DirectCast(Me.Page.FindControl("WineYardsGridView"), GridView)
Dim VineyardID As Integer = Convert.ToInt32(WineYardsGridView.SelectedDataKey.Value)
Fra en usercontrol i et formview kan jeg med "Me.Parent" få fat i en label som også ligger i formview'et, men jeg kan ikke fået det til at virke med "Me.Page", heller ikke hvis den ligger udenfor formview'et.
Du har jo en masterpage for at kunne sikre et konsistent layout for bunkevis af forms - så hvis din masterpage holder kode der sigter mod én bestemt form - er der jo ikke nogen gevinst i at have den... Så er den bare til besvær. De kontroller der overskrives af en given contentpage - ligger i de ContentPlaceholder's du har defineret på din masterpage. Du vil derfor i din masterpage kunne lave en: Me.ContentPlaceholder1.FindControl(...) og få dit grid på den måde.
Umiddelbart vil jeg tro, at du bliver nødt til så at gøre din usercontrol afhængig af din masterpage - ved at sikre dig at du kan kalde særlige medtoder på din masterpage, der så returnerer dig resultatet af FindControl(...) på en given ContentPlaceholder - f.eks. en metode så du kan gøre sådan her fra din usercontrol: Dim master as MyMaster = CType(Me.Page.Master, MyMaster) master.SpecializedFindControl(<id>); eller master.FindControl(<contentplaceholderid>,<controlid>); Men det er lidt af en sammenfiltring du ender op med at lave.
Såhh.... Det kan lade sig gøre. Der skal ikke særlig meget til. Det er som udgangspunkt en meget dårlig idé.
Hvis der sker hændelser på din masterpage, som du gerne fra andre sider vil gøre noget ved, kan du godt abbonnere på dem fra dine forms - og gøre det der skal gøre på den aktuelle side (altså - du kan definere event på din master, som du gjorde på din usercontrol i det andet spørgsmål). Der er så stadig en afhængighed imellem din masterpage og den form der abbonnerer på eventet, men man kan argumentere for at det er inden for rimelighedens grænser.
Du kan direkte i dit pagedirective angive din MasterType directive, hvilket medfører at du får typestærk adgang til din master fra kode bag din form - så slipper du for typecast hvis du skal arbejde med særlige properties/metoder/events på din master.
Det var noget af en smøre, men den giver nogenlunde mening :) Det lyder mest af alt som om det er min struktur som er forkert :( da det er for kringlet at skulle ind over masterpage'en.
Men det må da være ganske normalt at man skal bruge værdier fra andre kontroller på i en userkontrol, eller?? Og jeg kan ikke forstå at det skal være så besværtligt at hive en værdi ind i en usercontrol fra et gridview.
Men hvordan kan man så gemme selectedvale fra et gridview, er løsningen så måske i virkeligheden at bare bruge querystrings?
Njah... Man kan ikke sige at det er meget normalt at usercontrols skal bruge værdier fra andre usercontrols. Det er et nobelt mål for en UserControl at være en mindre selvstændig enhed - der kan benyttes på de sider man har lyst til - uafhængigt af hvilke andre kontroller der er lagt på siden. Hvis de skal kommunikere med hinanden vil det i de fleste tilfælde være det rigtigste at lade siden stå for den nødvendige kommunikation - og basere det på events og interfaces. Den med querystring'en har jeg skrevet om i det andet spørgsmål. Mvh
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.