Avatar billede ktolbod Nybegynder
09. maj 2006 - 10:53 Der 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?
Avatar billede snepnet Nybegynder
09. maj 2006 - 11:34 #1
Hvis dit gridview ligger på din page kan du
Me.Page.FindControl(...
Men lige umiddelbart er det ikke nogen særlig pæn løsning.
Mvh
Avatar billede ktolbod Nybegynder
09. maj 2006 - 12:04 #2
Hey S, Det virker sgu desværre ikk!

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?
Avatar billede snepnet Nybegynder
09. maj 2006 - 12:33 #3
Hvor ligger din GridView1?
Mvh
Avatar billede ktolbod Nybegynder
09. maj 2006 - 12:46 #4
På siden har jeg gridview1 og formview1 (og inde i formview1 har jeg så usercontrolen).
Avatar billede snepnet Nybegynder
09. maj 2006 - 12:50 #5
hvis du laver sådan en her:
Dim o as object = Me.Page.FindControl("GridView1")
og debugger... hvad har du så i variablen o?
Mvh
Avatar billede ktolbod Nybegynder
09. maj 2006 - 12:58 #6
Så indeholder o Nothing
Avatar billede snepnet Nybegynder
09. maj 2006 - 13:12 #7
Virker underligt ... Må jeg se din kode - både din aspx, og din codebehind.
Mvh
Avatar billede ktolbod Nybegynder
09. maj 2006 - 13:21 #8
Det må du gerne, men den er rimelig lang og en del af noget fileupload.
Men måske har jeg ikke forklaret godt nok.

I usercontrollen har jeg en button control og det er ved onclick på den jeg skal have fat i gridview1.
Avatar billede snepnet Nybegynder
09. maj 2006 - 13:28 #9
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
Avatar billede ktolbod Nybegynder
09. maj 2006 - 13:38 #10
Fra usercontrolen. onclick på "upload" button:

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)

'Indsæt det i databasen
End Sub
Avatar billede snepnet Nybegynder
09. maj 2006 - 13:42 #11
Og aspx'en med griddet i?
Mvh
Avatar billede ktolbod Nybegynder
09. maj 2006 - 13:45 #12
<asp:GridView ID="WineYardsGridView" runat="server" AllowPaging="True" AllowSorting="True"
        AutoGenerateColumns="False" DataKeyNames="VineyardID" DataSourceID="WineYardsGridViewSqlDataSource"
        PageSize="5">
        <Columns>

    <asp:SqlDataSource ID="WineYardsGridViewSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
        DeleteCommand="DELETE FROM [ShopVineyard] WHERE [VineyardID] = @VineyardID" InsertCommand="INSERT INTO [ShopVineyard] ([Name], [Country], [Landarea], [ShortDescr], [LongDescr], [Link], [OfferVineholiday], [Active], [Timemade]) VALUES (@Name, @Country, @Landarea, @ShortDescr, @LongDescr, @Link, @OfferVineholiday, @Active, @Timemade)"
        SelectCommand="SELECT * FROM [ShopVineyard] WHERE ([Name] LIKE '%' + @Name + '%' OR [Landarea] LIKE '%' + @Landarea + '%')" UpdateCommand="UPDATE [ShopVineyard] SET [Name] = @Name, [Country] = @Country, [Landarea] = @Landarea, [ShortDescr] = @ShortDescr, [LongDescr] = @LongDescr, [Link] = @Link, [OfferVineholiday] = @OfferVineholiday, [Active] = @Active WHERE [VineyardID] = @VineyardID">
        <SelectParameters>
            <asp:ControlParameter ControlID="q" Name="Name" PropertyName="Text" Type="String" DefaultValue="666" />
            <asp:ControlParameter ControlID="q" Name="Landarea" PropertyName="Text" Type="String" DefaultValue="666" />
        </SelectParameters>
        <DeleteParameters>
            <asp:Parameter Name="VineyardID" Type="Int32" />
        </DeleteParameters>
        <UpdateParameters>
            <asp:Parameter Name="Name" Type="String" />
            <asp:Parameter Name="Country" Type="String" />
            <asp:Parameter Name="Landarea" Type="String" />
            <asp:Parameter Name="ShortDescr" Type="String" />
            <asp:Parameter Name="LongDescr" Type="String" />
            <asp:Parameter Name="Link" Type="String" />
            <asp:Parameter Name="OfferVineholiday" Type="Boolean" />
            <asp:Parameter Name="Active" Type="Int16" />
            <asp:Parameter Name="Timemade" Type="DateTime" />
            <asp:Parameter Name="VineyardID" Type="Int32" />
        </UpdateParameters>
        <InsertParameters>
            <asp:Parameter Name="Name" Type="String" />
            <asp:Parameter Name="Country" Type="String" />
            <asp:Parameter Name="Landarea" Type="String" />
            <asp:Parameter Name="ShortDescr" Type="String" />
            <asp:Parameter Name="LongDescr" Type="String" />
            <asp:Parameter Name="Link" Type="String" />
            <asp:Parameter Name="OfferVineholiday" Type="Boolean" />
            <asp:Parameter Name="Active" Type="Int16" />
            <asp:Parameter Name="Timemade" Type="DateTime" />
        </InsertParameters>
    </asp:SqlDataSource>
            <asp:CommandField SelectImageUrl="~/Images/Icons/arrow3_s.gif" ShowDeleteButton="True"
                ShowSelectButton="True" />
            <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
            <asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" />
            <asp:BoundField DataField="Link" HeaderText="Link" SortExpression="Link" />
            <asp:CheckBoxField DataField="OfferVineholiday" HeaderText="OfferVineholiday" SortExpression="OfferVineholiday" />
            <asp:CheckBoxField DataField="Active" HeaderText="Active" SortExpression="Active" />
        </Columns>
    </asp:GridView>
Avatar billede ktolbod Nybegynder
09. maj 2006 - 14:18 #13
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.
Avatar billede snepnet Nybegynder
09. maj 2006 - 14:28 #14
Jeg kan forstå - på det andet spørgsmål - at du har din usercontrol på en master.
Det er derfor du ikke kan få fat i griddet.
Mvh
Avatar billede ktolbod Nybegynder
09. maj 2006 - 14:32 #15
Nej den ligger ikke i en master, men i et formview.
Men siden hvorpå formviewet er har har en masterfil.

Så med Me.Page hiver jeg fat i master filen?
Hvis ja hvordan hiver jeg så fat i en underliggende side?
Avatar billede snepnet Nybegynder
09. maj 2006 - 15:24 #16
Det er ikke særlig fedt at lave det sådan.

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.

Mvh
Avatar billede ktolbod Nybegynder
09. maj 2006 - 15:48 #17
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?
Avatar billede snepnet Nybegynder
09. maj 2006 - 20:27 #18
Jeg skal nok vende tilbage lidt senere :o)
Mvh
Avatar billede snepnet Nybegynder
10. maj 2006 - 00:53 #19
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
Avatar billede ktolbod Nybegynder
10. maj 2006 - 10:17 #20
Tak for hjælpen, det er fedt!
Jeg laver min struktur om, og jeg dropper user kontrollen :)
Smider du et svar snepnet
Avatar billede snepnet Nybegynder
10. maj 2006 - 12:11 #21
Et svar kommer her :o)
Mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester