Avatar billede runberg Nybegynder
30. oktober 2002 - 15:58 Der er 16 kommentarer og
1 løsning

Dynamisk indsættelse af custom control med forskellige værdier???

Hejsa

Jeg har et stort problem!!!

På en af mine aspx sider, ønsker jeg dynamisk at indsætte et forskelligt/dynamisk antal af custom controls, hvor de forskellig controls har forskellige værdier.

Jeg har hidtil forsøgt 2 forskellige ting:

----Forsøg 1-------------
Her kører jeg i scriptet en løkke, som skriver  det hele til en string. Denne string har jeg så forsøgt at skrive med response.write nede i min html:

For count2 = 0 to drawArray.getUpperBound(0)
        dim tempMachine() as String = drawArray(count2)
       
        write1 = "dette er en test"
       
        write1 = write1 & "<MYCONTROL:myPanel id=""panel""" & count2
        write1 = write1 & """ runat=""server"" marked="""
        write1 = write1 & tempmachine(2) & """type="""
        write1 = write1 & tempmachine(1) & """name="""
        write1 = write1 & tempmachine(0) & """place="""
        write1 = write1 & tempmachine(3) & """></MYCONTROL:myPanel>"
     
      Next
...
....
<body>
    <form runat="server">
        Response.Write(write1)
    </form>
</body>

... Dette lykkedes naturligvis ikke!!!

----- Forsøg 2 -------

Her forsøgte jeg at indsætte et script i min html, som kørte løkken, og dermed skrev controllen direkte ind på siden, sammen med dens værdier:
<body>
    <form runat="server">
               
        <%
       
      For count2 = 0 to drawArray.getUpperBound(0)
        dim tempMachine() as String = drawArray(count2)
       
        %>
       
        <MYCONTROL:myPanel id="panel" runat="server" marked=<%=tempmachine(2)%> type=<%=tempmachine(1)%> name=<%=tempmachine(0)%>></MYCONTROL:myPanel>
     
        <%
      Next
       
        %>
       
       
    </form>
</body>

Denne løsning virkede skam heller ikke, så nu er jeg løbet tør for ideer, og håber derfor der er en der kan hjælpe mig!!!!

På forhånd tak!!!
Avatar billede askhoej Praktikant
30. oktober 2002 - 16:10 #1
Du kan smide din User Control ind i en ASP:Repeater.

/askhoej
Avatar billede askhoej Praktikant
30. oktober 2002 - 16:18 #2
f.eks:
<asp:Repeater Runat="server">
<HeaderTemplate>
  <!-- Hoved -->
</HeaderTemplate>
<ItemTemplate>
  <MYCONTROL:myPanel id="panel" runat="server" marked='<%# DataBinder.Eval(Container.DataItem,"marked_fra_datakilde")%>' type='<%# DataBinder.Eval(Container.DataItem,"typefra_datakilde")%>'name='<%# DataBinder.Eval(Container.DataItem,"name_fra_datakilde")%>'></MYCONTROL:myPanel>
</ItemTemplate>
<FooterTemplate>
  <!-- Bund -->
</FooterTemplate>
</asp:Repeater>

/askhoej
Avatar billede runberg Nybegynder
31. oktober 2002 - 08:37 #3
Lyder meget interessant, men hvor skal denne repeater sættes ind?? imellem formtagsne, eller oppe i mit script????
Avatar billede askhoej Praktikant
31. oktober 2002 - 09:04 #4
Den skal placeres i mellem dine form tags og data bindes til kontrollen i dit script. Her er et link der viser hvordan:

http://www.learnasp.com/freebook/learn/templates1.aspx

Ellers så kig i .NET SDK'en der er også gode eksempler.

/askhoej
Avatar billede runberg Nybegynder
31. oktober 2002 - 09:10 #5
Har fundet en del eksempler, men samtlige af dem, tager udgangspunkt i at jeg skal binde en recordset fra en DB til containeren. I mit tilfælde har jeg et array, og det er dette der skal løbes igennem....
Avatar billede askhoej Praktikant
31. oktober 2002 - 09:21 #6
Her er et eksempel med en ArrayList og en HashTable det tror jeg kan bruges:

http://www.dotnet247.com/247reference/msgs/17/87023.aspx

/askhoej
Avatar billede runberg Nybegynder
31. oktober 2002 - 11:54 #7
OK, jeg har fundet ud af det nu, så tak for det.... Inden du får pointene, kunne jeg dog godt lige tænke mig at presse endnu et svar ud af dig:

når man bruger Databinder.Eval(Container.DataItem, "variabel"), så henter man en variabel i det object, man har fat i, i den pågældende itteration, men hvordan gør man hvis man ønsker at have fat i hele objectet?? Som i mit eksempel, hvor jeg ønsker at gemme hele objectet i en session-variabel??
Avatar billede askhoej Praktikant
31. oktober 2002 - 12:30 #8
Vil tro at du burde kunne gemme dit data objekt, f.eks. et dataset, i en Session sådan her:

DataSet ds;
Session["dataset"] = ds;

DataSet ds2 = (DataSet)Session["dataset"];

Men pas på med at smide alt for store objekter i dine sessions, det er skidt for performance.

/askhoej
Avatar billede runberg Nybegynder
31. oktober 2002 - 12:37 #9
Jo okay, men hvordan henter jeg hele objectet i min repeater??
Avatar billede runberg Nybegynder
31. oktober 2002 - 12:38 #10
Problemet er at jeg i min itterative repeater skal kalde en side drawline.aspx, og denne skal bruge et array/arraylist, for at udføre sin kode!
Avatar billede runberg Nybegynder
31. oktober 2002 - 12:42 #11
Ahh.. bliver vist lige nød til at uddybe noget af problemstillingen:

Den arrayliste, som jeg itterere på ved hjælp af repeateren, indeholder objecter af typen array. Hele dette object, vil jeg så have sendt til min draw.aspx fil (evt. via session, da dette er det nemmeste). Mit problem er bare, at jeg ikke ved hvordan i repeateren, jeg henter hele objectet. I mit eksempel overfor, får jeg kun en bestemt variabel i det pågældende object, i itterationen.
Avatar billede askhoej Praktikant
31. oktober 2002 - 13:01 #12
Hmm...er ikke sikker på hvad det er du vil, men hva med noget i retningen af:

<%# (DataSet)DataBinder.Eval(Container.DataItem, "dit_dataset")>

/askhoej
Avatar billede runberg Nybegynder
31. oktober 2002 - 13:35 #13
Neej... Det var vist ikke helt det jeg mente, så prøver lige at forklare det igen:

Jeg har to arraylist ( 1 & 2)

Araylist 1, er den jeg ittererer på i min repeater.
Araylist 1 værdier er araylist2 elementer

Dvs. Araylist1(0) = araylist2 element
    Araylist1(1) = araylist2 element
    Araylist1(2) = araylist2 element
    osv....

Når jeg så gennemløber araylist1 i min repeater, så vil jeg hver gang stå med et araylist2 element. Hele dette element, ønsker jeg så at sende.....

Det er lidt svært at forklare, så du får lige hele min kode. Problemet ligger der, hvor jeg har skrevet BEMÆRK!!!

------ Kode ---------------

<%@ Page Language="VB" Debug="true"%>
<%@ Register TagPrefix="MYCONTROL" TagName="myPanel" Src="ascx\panel.ascx" %>
<script runat="server">

dim drawArray As New ArrayList()
dim lineArray As New ArrayList()
dim numberArray as New ArrayList()
dim linepics as integer = 0
dim count1, count2, count3 as integer

    sub Page_Load(obj as object, e as eventargs)
     
      drawArray.Add(New Machine("machine1", "storage", "false", "0,0", "0"))
      drawArray.Add(New Machine("machine2", "machine", "false", "1,0", "0,1"))
      drawArray.Add(New Machine("machine3", "machine", "false", "2,0", "0,1"))
      drawArray.Add(New Machine("machine4", "machine", "false", "2,1", "0,1"))
      drawArray.Add(New Machine("machine5", "goods",  "false", "3,0", "-1"))

      myRepeater1.DataSource = drawArray
      myRepeater1.DataBind() 
     
      For count1 = 0 to (drawArray.count()-1)
        dim tempMachine as Machine = drawArray(count1)
        dim tempPlace as String = tempMachine.Posision
       
        dim StringArray() as String = tempPlace.ToString().Split(Convert.ToChar(","))
        dim lineNumber as integer = cInt(StringArray(0))
       
        if (lineNumber>linepics) then
          linepics = lineNumber
        end if
      Next
     
      For count2 = 0 to linepics
        dim myArray as New ArrayList()
        For count3 = 0 to (drawArray.count()-1)
          dim tempMachine as Machine = drawArray(count3)
          dim StringArray() as String = tempMachine.Posision.ToString().Split(Convert.ToChar(","))
          dim lineNumber as integer = cInt(StringArray(0))
          If lineNumber = count2 then
            myArray.add(tempMachine.lines)
          End If
        Next
        lineArray.add( myArray )
        numberArray.add ( count2 )
      Next
     
      myRepeater2.DataSource = numberArray
      myRepeater2.DataBind()

    end sub

Public Class Machine
   
      private myName as String
      private myType as String
      private myMarked as String
      private myPosision as String
      private myLines as String
     
      Public Sub New(newName as String, newType as String, newMarked as String, newPosision as String, newLines as String)
        Me.myName = newName
        Me.myType = newType
        Me.myMarked = newMarked
        Me.myPosision = newPosision
        Me.myLines = newLines
      End Sub
       
        Public ReadOnly Property Name() As String
          Get
            Return myName
          End Get
        End Property
       
        Public ReadOnly Property Type() As String
          Get
            Return myType
          End Get
        End Property
       
        Public ReadOnly Property Marked() As String
          Get
            Return myMarked
          End Get
        End Property
       
        Public ReadOnly Property Posision() As String
          Get
            Return myPosision
          End Get
        End Property
       
        Public ReadOnly Property Lines() As String
          Get
            Return myLines
          End Get
        End Property
    End Class
   
</script>

<html>
<head>
</head>
<body>
    <form runat="server">
      <asp:Repeater id="myRepeater1" runat="server">
          <HeaderTemplate>
            <!--Header-->
          </HeaderTemplate>
          <ItemTemplate>
         
          <MYCONTROL:myPanel id="panel" runat="server"
                              marked='<%#DataBinder.Eval(Container.DataItem, "marked") %>'
                              type='<%#DataBinder.Eval(Container.DataItem, "type") %>'
                              name='<%#DataBinder.Eval(Container.DataItem, "name") %>'
                              posision='<%#DataBinder.Eval(Container.DataItem, "posision") %>'>
          </MYCONTROL:myPanel>
         
          </ItemTemplate>
          <FooterTemplate>
            <!--Footer-->
          </FooterTemplate>
        </asp:Repeater>
       
        <asp:Repeater id="myRepeater2" runat="server">
          <HeaderTemplate>
            <!--Header-->
 
          </HeaderTemplate>
          <ItemTemplate>
            <% Session("Arraylist") = <%# Container.DataItem %> BEMÆRK!!!!!!!!
            <img src="drawline.aspx" border="0" />
            <% Session.abandon %>
         
          </ItemTemplate>
          <FooterTemplate>
            <!--Footer-->
          </FooterTemplate>
        </asp:Repeater>
       
    </form>
</body>
</html>
Avatar billede runberg Nybegynder
31. oktober 2002 - 13:36 #14
Der hvor jeg har skrevet bemærk, der ønsker jeg at sende hele det objekt, som min repeater er nået til, og ikke som i det forrige tilfælde, hvor jeg hiver en bestemt værdi ud af objectet
Avatar billede runberg Nybegynder
31. oktober 2002 - 13:37 #15
PS: Det kan være andre småfejl i koden, da jeg har siddet og rodet en del med den, men dem skal du ikke tage dig af :-)
Avatar billede askhoej Praktikant
31. oktober 2002 - 16:15 #16
Har ikke lige så meget tid til at tilrette din kode, men hvis jeg var dig ville jeg nok overveje at binde data til din tegnefunktion på en anden måde end den du har tænkt dig.

Måske kan du give data til tegnefunktion via parametre i din drawline.aspx?

f.eks.


<img src="drawline.aspx?par_1=<%#DataBinder.Eval(Container.DataItem, "type") %>&par_2=etc. " border="0" />

/askhoej
Avatar billede runberg Nybegynder
01. november 2002 - 08:04 #17
Ja.... Det er også sådan noget, jeg forsøger med i øjeblikket!!

Du får tusind tak for hjælpen!
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