Avatar billede psn Nybegynder
13. juli 2004 - 17:55 Der er 8 kommentarer og
1 løsning

skift labeltekst efter klik på billede

Hej!

Jeg har en side med 9 billeder af forskellige personer. Nederst på siden har jeg en række labels, som skal udfyldes med oplysninger om personen, hvis billede, der klikkes på.

Er der nogle, der har en ide til at løse dette?
Avatar billede repsak Nybegynder
13. juli 2004 - 22:53 #1
Det afhænger af hvor dine oplysninger ligger lagret. Hvis de ligger på serveren i en DB er det ikke lettest at lave en url-parameter:

pseudo:
--------
<billede href="?id=1" />

page_load:
select * from person where id = querystring[id]
put info i labels
--------

Forstår du min idé?
Avatar billede repsak Nybegynder
13. juli 2004 - 22:54 #2
omformulering:
"...er det SÅ ikke lettest at lave..."
Avatar billede thrytter Nybegynder
14. juli 2004 - 10:17 #3
Jeg vil foreslå at du bruger JavaScript og Array's til at gemme dine oplysninger i.

Kunne være noget i stil med:

// Script del til visning af data
<script type="text/javascript">
  var arrData = new Array();
                                     
  function dataAdd(sName, sAdress)
  {               
    iLength = arrData.length;
       
    arrData[iLength] = new Array();
    arrData[iLength][0] = sName;
    arrData[iLength][1] = sAdress;               
  }
           
  function dataShow(i)
  {
    if (!arrData[0])
      dataInit();
                   
    if (!arrData[0] || i >= arrData.length)
      alert("Data kan ikke vises.");
    else
    {
      document.getElementById("lblName").innerText = arrData[i][0];
      document.getElementById("lblAdress").innerHTML = arrData[i][1];
    }               
  }   
</script>


// VB del der fylder JS-Array'et med data fra en DataTable med samme størrelse som den der bruges til galleriet.

Private Sub Script_DataInit(ByVal dtData As DataTable)
  Dim oSB As New System.Text.StringBuilder
  Dim sName As String
  Dim sAge As String
  Dim sAdress As String

  Dim i As Integer

  oSB.Append("<script language='javascript'>")
  oSB.Append("function dataInit()")
  oSB.Append("{")

  For i = 0 To dtData.Rows.Count - 1
    sName = dtData.Rows(i).Item("Name").ToString
    sAdress = dtData.Rows(i).Item("Adress").ToString

    oSB.Append("dataAdd('" & sName & "','" & sAdress & "');")
  Next

  oSB.Append("}")
  oSB.Append("</script>")

  RegisterClientScriptBlock("dataInit", oSB.ToString)
End Sub


// Tilføjelse af onclick til hvert billede
Private Sub dgTest_ItemDataBound(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgTest.ItemDataBound
  Select Case e.Item.ItemType
    Case ListItemType.Item, ListItemType.AlternatingItem
        CType(e.Item.FindControl("imgPerson"), System.Web.UI.WebControls.Image).Attributes.Add("onclick", "java script:dataShow(" & e.Item.ItemIndex & ");")
  End Select
End Sub

Kan sikkert gøres bedre, men skulle virke.
Avatar billede repsak Nybegynder
14. juli 2004 - 10:24 #4
thrytter -> synes nu at det er meget kode for at undgå postback ;-) - men ideen er helt klart god - og hurtig
Avatar billede thrytter Nybegynder
14. juli 2004 - 10:55 #5
repsak >> Alt er som bekendt relativt - mener ikke at 100 liniers kode er meget HVIS det betyder en bedre løsning (siger IKKE at min er bedre)

Kunne også foreslå en løsning hvor de enkelte persondata hentes v.hj.a. javascript UDEN postback og array's.
Avatar billede repsak Nybegynder
14. juli 2004 - 11:08 #6
Gider du uddybe den løsning?
Avatar billede thrytter Nybegynder
14. juli 2004 - 12:29 #7
Løsningen kalder en side, der udfra det medsendte Id loader de nødvendige persondata fra databasen, opdaterer den kaldende side og derefter lukker siden.

For at undgå en irriterende popup, loades siden i en skjult iFRAME.

Når de nødvendige data er loadet kan følgende kaldes:


Dim oSB As New System.Text.StringBuilder

oSB.Append("<script type=""text/javascript"">")
oSB.Append("top.document.getElementById(""lblName"").innerText='" & _NAVN_ & "';")
oSB.Append("top.document.getElementById(""lblAdress"").innerText='" & _ADRESSE_ & "';")
oSB.Append("window.close();")
oSB.Append("</script>")

RegisterClientScriptBlock("loadandclose", oSB.ToString)


Siden loades i en tilføjet IFRAME
<iframe id="frameTmp" name="frameTmp" style="display:none;"></iframe>


Har indkapslet "imgPerson" i en HyperLink og ændret dgTest_OnItemDataBound til:

Private Sub dgTest_ItemDataBound(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgTest.ItemDataBound
  Select Case e.Item.ItemType
    Case ListItemType.Item, ListItemType.AlternatingItem
      CType(e.Item.FindControl("hlDataLoad"), HyperLink).NavigateUrl = "test.aspx?id=" & e.Item.Cells(0).Text
      CType(e.Item.FindControl("hlDataLoad"), HyperLink).Target = "frameTmp"       
  End Select
End Sub
Avatar billede psn Nybegynder
15. juli 2004 - 22:02 #8
Så er jeg tilbage igen. Tak for de gode og uddybende kommentarer. Jeg tror jeg prøver at arbejde videre med repsaks løsning, da den virker som den mest simple. Men smid et svar begge 2(repsak og thrytter), så kan i dele pointene. Endnu engang tak.
Avatar billede repsak Nybegynder
16. juli 2004 - 10:23 #9
thrytter -> jeg kan godt se din idé, men jeg vil stadig mene at det som grundregel er bedst at holde data på serveren (konkrete tilfælde kan altid diskuteres :)

psn -> my answer is posted
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