Avatar billede jdavid Nybegynder
17. marts 2004 - 13:00 Der er 16 kommentarer og
1 løsning

Itemtemplate med hyperlink, parameteroverførsel

Hejsa

Jeg fandt følgende kode på nettet, som jeg vil bruge i min app.
problemet er at jeg ikke kan gennemskue hvordan jeg bruger den parameter(mssql_id) som jeg sender til details.aspx til at fylde en datalist med alt fra den tabel hvor parameteren er primærnøgle. Det hele funker på den side hvor jeg bruger klassen. Dataene ligger i en mssql db.
Jeg havde forestillet mig en sqldataadapter("SELECT * FROM tabel WHERE mssql_id = "og så parameteren)   

klassen:
Class myHyperlinkcolumn
        Implements ITemplate

        Sub Instantiatein(ByVal container As Control) Implements ITemplate.InstantiateIn
            Dim hlink As HyperLink = New HyperLink
            AddHandler hlink.DataBinding, AddressOf BindHyperLinkColumn
            container.Controls.Add(hlink)
        End Sub

        Public Sub BindHyperLinkColumn(ByVal sender As Object, ByVal e As EventArgs)
            Dim hlink As HyperLink = CType(sender, HyperLink)
            Dim container As DataGridItem = CType(hlink.NamingContainer, DataGridItem)
            Dim strVals As String
            strVals = "id=" & Convert.ToString(DataBinder.Eval( _
            (CType(container, DataGridItem)).DataItem, "MS_SQL_ID"))
            hlink.NavigateUrl = "details.aspx?" & strVals
            hlink.Text = "Show details"

        End Sub
    End Class>

kaldt fra:
Dim tempclm As New TemplateColumn
                tempclm.ItemTemplate = New myHyperlinkcolumn
                DataGrid1.Columns.Add(tempclm)
                DataGrid1.DataSource = ds.Tables(0)
                DataGrid1.DataBind()
Avatar billede jakobg Nybegynder
17. marts 2004 - 14:16 #1
Kan du ikke liiiige forklare, hvad det egentlig er du vil lave? Så skal jeg se, om jeg kan hjælpe dig igen.
Avatar billede jdavid Nybegynder
17. marts 2004 - 14:34 #2
Hej igen Jakobg.
På den side som du hjalp mig med i går, er der et datagrid som vi jo fik fyldt noget farve på.
Det virker fint. Men en af kolonnerne i det datagrid er sådan en templateComlumn, som ved hjælp af klassen myHyperlinkcolumn genererer et link (se koden ovenover) til details.aspx.
Som du så i går, har jeg 4 attributter i mit datagrid, plus den kolonne med linket. planen er at linket skal fylde en datalist med alle data fra ms_sql tabellen som man kan redigere i.
Når du spørger helt konkret hvad det er jeg vil lave, tror jeg at det mest præcise svar er "Jeg vil have adgang til værdien af strVals i details.aspx.vb. for som jeg ser det, skal jeg lave en dataadapter som den jeg beskrev ovenfor.
Avatar billede jakobg Nybegynder
17. marts 2004 - 14:46 #3
Altså når du klikker på et link i dit datagrid, vil du loade data i en datalist på samme side?
Avatar billede jakobg Nybegynder
17. marts 2004 - 15:02 #4
Hvis du vil bruge Hyperlink columns, ser de sådan hér ud:

<asp:HyperLinkColumn DataNavigateUrlField="ID" DataNavigateUrlFormatString="webform1.aspx?ID={0}" Text="klik mig"></asp:HyperLinkColumn>

Den tilføjer du bare i dit datagrid sammen med de andre columns. Bemærk, at {0} bliver erstattet med den værdi du trækker ud (angivet i DataNavigateUrlField).

Men jeg er ret sikker på, at det ikke er den bedste løsning i dit tilfælde, formentlig er det en buttoncolumn du skal bruge i stedet: Med en hyperlinkcolumn kalder du en helt ny side, mens du bare kan nøjes med at poste til den samme side igen.
Avatar billede jdavid Nybegynder
17. marts 2004 - 15:49 #5
Jeg har linkcolumn på plads (se myHyperlink klassen i koden øverst)
når jeg klikker på linket redirecter den til
details.aspx?id='værdien fra pågældende row i datagrid'
Jeg vil lige overveje buttoncolumn
Avatar billede jakobg Nybegynder
17. marts 2004 - 16:02 #6
Du skal kun bruge en buttoncolumn, hvis det er den samme side, som viser details. Ellers er en linkcolumn eller hyperlinkcolumn dét du er ude efter.
Eller også skulle du bare lave et fladt link i en templatecolumn?
Avatar billede jdavid Nybegynder
17. marts 2004 - 16:34 #7
Jeg tror jeg holder mig til det jeg har lavet nu. Jeg skal bare have de sidste detaljer på plads så tror jeg den er der. Men du kan lige poste et svar så får du points.
Avatar billede jakobg Nybegynder
17. marts 2004 - 16:50 #8
Tadaaaa! :)
Avatar billede jdavid Nybegynder
17. marts 2004 - 17:12 #9
Tak for hjælpen igen
:o)
Avatar billede jdavid Nybegynder
18. marts 2004 - 13:10 #10
Hej igen Jakobg
Kan du uddybe "et fladt link i en templatecolumn"?
Avatar billede jakobg Nybegynder
18. marts 2004 - 14:17 #11
Jeps, jeg mente noget i denne stil:

<asp:TemplateColumn>
<ItemTemplate>
  <a href='<%= "webform1.aspx?ID=" & Container.DataItem("ID") %>'>Klik mig!</a>
</ItemTemplate>
</asp:TemplateColumn>
Avatar billede jakobg Nybegynder
18. marts 2004 - 14:21 #12
Grunden til at "webform.aspx" er med inde i <%# ... %> er at ellers hyler VS.NET over syntaxen, altså hvis man lavede noget ala dette hér:

<asp:TemplateColumn>
<ItemTemplate>
  <a href='webform1.aspx?ID=<%# Container.DataItem("ID") %>'>Klik mig!</a>
</ItemTemplate>
</asp:TemplateColumn>

Begge dele er lovligt, men i det sidste eksempel mister man Design Mode i VS.NET.

Iøvrigt skal det være <%# ... %> og ikke <%= ... %> som jeg kom til at skrive i det første eksempel. :)
Avatar billede jdavid Nybegynder
18. marts 2004 - 23:52 #13
det kan godt være at det er et lidt dumt spørgsmål, men det jeg er i tvivl om er;
når jeg bruger webform1.aspx?ID={0}så sender jeg jo id'et på den 0'te plads med over til den side jeg redirecter til.. feks fra webform1.aspx til details.aspx
Så kommer id med i URL'en feks details.aspx?id=56
Eller har jeg totalt misforstået ideen? og hvordan får jeg mulighed for at bruge værdien 56 i details.aspx? Jeg vil jo gerne åbne alle kolonner fra den post der har id 56 i details.aspx i en datalist eller et grid så jeg har mulighed for at redigere dem.
Avatar billede jakobg Nybegynder
19. marts 2004 - 09:11 #14
Du fanger ID'et igen på details.aspx med Request.QueryString:

dim ID as integer = Request.QueryString("ID")

Men er det data'ene du viser i det første datagrid, som du vil redigere i? For hvis det er dét, kan du altså lave nogen ret smarte ting med et datagrid, hvor du aktiverer en række i datagrid'et, og derefter kan redigere i alle felterne...
Avatar billede jdavid Nybegynder
19. marts 2004 - 09:20 #15
fortæl fortæl...
:o)
Avatar billede jakobg Nybegynder
19. marts 2004 - 09:37 #16
Hehe, ja jeg kunne sikkert bruge MANGE timer på at lære dig Datagrids, men før vi går i gang med det, så læs lidt på lektien først:

http://aspnet.4guysfromrolla.com/articles/040502-1.aspx
http://www.datagridgirl.com

Der findes MANGE artikler om datagrids på nettet, og det giver også mening: Det er klart en de mest interessante controls i ASP.NET.

Og hvis det brænder helt sammen for dig, kan du bare oprette et nyt spørgsmål her på Eksperten, så skal jeg nok være der! :)
Avatar billede jdavid Nybegynder
19. marts 2004 - 10:24 #17
right on it.
Takker
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