Avatar billede brian-johansen Nybegynder
30. maj 2006 - 14:47 Der er 8 kommentarer og
1 løsning

Problemer med en ArrayList i samspil med et galleri

Hej,
Jeg har fået et problem, men min Arraylist, jeg bruger den i forbindelse med at den skal holde filnavne på de billeder der ligger i mit galleri, men når jeg beder den om at køre hele min mappe igennem, så bliver den ved med at overskrive de andre værdier i arraylisten, hvilket resultere i at jeg får det samme billede vist 50 gange.

Jeg kan ikke umiddelbart gennemskue hvad jeg gør forkert.

--- Koden ----
Først har jeg en side der hedder Image.Aspx, den får sine værdier fra en objectdatasource

  <ItemTemplate>
          <table>
              <tr> <%# DataBinder.Eval ( Container.DataItem, "url" )%></tr>
              <tr> <%# DataBinder.Eval ( Container.DataItem, "img" )%></tr>
            </table>
            </ItemTemplate>
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <SelectedItemStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <AlternatingItemStyle BackColor="White" ForeColor="#284775" />
            <ItemStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        </asp:DataList><br />
        &nbsp; &nbsp;<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData"
            TypeName="myData"></asp:ObjectDataSource>


MyData Kommer fra en klase der ligger i en fil der hedder billeder.cs

Denne ser sådan ud:

public class billeder
{
    private string _url = null;
    private string _img = null;

    public string url
    {
        get { return _url; }
        set { _url = value; }

    }
    public string img
    {
        get { return _img; }
        set { _img = value; }

    }

    public billeder()
    {
        //
        // TODO: Add constructor logic here
        //
    }
}

public class myData
{
    const int maxWidth = 100;
    const int maxHeight = 100;
    public myData()
    { }

    public ICollection GetData()
    {
        ArrayList list = new ArrayList();
        billeder row = new billeder();
        int imgHeight;
        int imgWidth;

        foreach (string s in Directory.GetFiles(System.Web.HttpContext.Current.Server.MapPath
        ("Galleri/"), "*.jpg"))
        {
            System.Drawing.Image currentImage = System.Drawing.Image.FromFile(s);
            imgHeight = currentImage.Height;
            imgWidth = currentImage.Width;
         
            if ((imgWidth > maxWidth) || (imgHeight > maxHeight))
            {
                int deltaWidth = imgWidth - maxWidth;
                int deltaHeight = imgHeight - maxHeight;
                double scaleFactor;

                if (deltaHeight > deltaWidth)
                {
                    scaleFactor = Convert.ToDouble(maxHeight) / imgHeight;
                }
                else
                {
                    scaleFactor = Convert.ToDouble(maxWidth) / imgWidth;
                }

                imgWidth = Convert.ToInt32(imgWidth * scaleFactor);
                imgHeight = Convert.ToInt32(imgHeight * scaleFactor);

                row.img = "<a href=image.aspx?id=Galleri/"+Path.GetFileName(s)+">Vis</a>";
                row.url = "<img src=Galleri/" + Path.GetFileName(s) + " height=" + imgHeight + " width=" + imgWidth +"/>";
               
                list.Add(row);
               
               
            }

           
        }
     
        return list;
    }
   
}



Det er så den der hedder list der er min arraylist, den bliver fyldt op via min properties. Den underlige er bare at når den beder om at add en ny Row, så gør den også det, men den ændre alle andre elementer i arraylisten til det samme.

Er der nogen der har et forslag til hvordan man løser dette ?

mvh Brian
Avatar billede snepnet Nybegynder
30. maj 2006 - 14:59 #1
Det ser også ud til at være det samme row du lægger ind hver gang... Du skal instantiere dig et nyt billede for hvert gennemløb, så bare flyt denne her:
billeder row = new billeder();
Ned i løkken.
Mvh
Avatar billede brian-johansen Nybegynder
30. maj 2006 - 15:02 #2
Jeg må ikke erklære den Row fordi det vil give en anden mening ?

Er det ikke lige under list.add(row) du vil have mig til at skrive det?

mvh Brian
Avatar billede snepnet Nybegynder
30. maj 2006 - 15:11 #3
Nej - det er inden du sætter properties på det.
(og så fjerne linien før løkken).

billeder row = new billeder();
row.img = "<a href=image.aspx?id=Galleri/"+Path.GetFileName(s)+">Vis</a>";
row.url = "<img src=Galleri/" + Path.GetFileName(s) + " height=" + imgHeight + " width=" + imgWidth +"/>";
list.Add(row);

Mvh
Avatar billede brian-johansen Nybegynder
30. maj 2006 - 15:14 #4
Fantastisk Det virkede!

Tak for det, ligger du lige et svar ?

Jeg tænkte på om du kan nå et andet hurtigt lille spg ?
Avatar billede snepnet Nybegynder
30. maj 2006 - 15:37 #5
Bare skyd - jeg skal nok svare (kan dog være at jeg lige er væk fra klaveret engang imellem).
Mvh
Avatar billede brian-johansen Nybegynder
30. maj 2006 - 15:43 #6
hehe tak for det.

Det er fordi jeg har lavet så at jeg kan styre de elementer der er min gridview dvs. at jeg kan flytte dem op og ned via nogle pile. Nu er det bare sådan at når jeg trykker fx. på "pil op" så rykker personens navn op, men den "selected" række følger ikke med, dvs at man skal gå hen og trykke select hver gang man trykker på pilen og det er lidt træls.

Har du sådan umiddelbart en løsning på dette ?

Det er et eller andet med noget Gridview1.SelectedIndex -1 eller + 1 alt efter hvad vej den skal.

mvh Brian
Avatar billede snepnet Nybegynder
30. maj 2006 - 18:05 #7
Gridview1.SelectedIndex+=1 / Gridview1.SelectedIndex-=1
Mvh
Avatar billede brian-johansen Nybegynder
30. maj 2006 - 18:14 #8
Det virker! Det var jo fuldstændig fantastisk tak for hjælpen.

mvh
Avatar billede snepnet Nybegynder
31. maj 2006 - 17:52 #9
Var så lidt :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