Avatar billede strafenmacher Nybegynder
05. september 2003 - 12:28 Der er 6 kommentarer og
1 løsning

Hente Images via database

Jeg har problemer med, at få images frem på en webform, når det drejer sig om at skulle hente disse images via en database. Images skal ikke ligge direkte i databasen, men et eller andet sted på disken. Databasen skal bare indeholde filplaceringen på images, og når der søges på alle images, skal den kunne opgive filplaceringen, og så ud fra dette hente alle images.
Hvis nogen kan hjælpe med dette vil jeg være taknemmelig (især hvis der er nogen der har eksempler i C# !).
Avatar billede burningice Nybegynder
05. september 2003 - 13:04 #1
<asp:Image id="img" ImageUrl="dinurlfradatabase" runat="server" />

??
Avatar billede strafenmacher Nybegynder
05. september 2003 - 16:22 #2
Hej cyberfessor.

Så simpelt er det desværre ikke.
Problemet er hvordan jeg får denne Url fra databasen skrevet ind i min ImageUrl i ASP Image-kontrollen ?  Det skal ikke gøres manuelt, -men det skal ske automatisk, når eksempelvis en linie i en ListBox bliver markeret. Linien i ListBoxen er f.eks. et katalognavn, hvor alle billederne i dette katalog så fremvises, når linien bliver markeret.
Indtil videre har jeg problemer med bare at få ét billede vist på denne måde, men endnu værre bliver det, når man skal have alle billederne i kataloget vist. Man kan jo ikke gætte sig til, hvor mange Image-kontroller man skal have oprettet, da billederne i kataloget hele tiden kan variere i antal ????!!??!!

Jeg håber der kommer en løsning på dette (snart irriterende !) problem.
Avatar billede burningice Nybegynder
05. september 2003 - 16:33 #3
så laver du en repeater som du binder til din reader får fra db'en... inde i den repeater har du en image-kontrol, som asp.net så selv sørger for at oprette x-antal gange
Avatar billede strafenmacher Nybegynder
07. september 2003 - 11:07 #4
Jeg kan få Repeateren til at fungere, -men den tager kun ét billede (det sidste i rækken !).
Jeg har så forsøgt med en foreach-løkke, -men heller ikke med held.
Skal man måske anvende DataList, DataGrid eller andet for at få alle data frem, eller SKAL det kunne fungere med Repeater, -og i så fald bliver jeg glad, hvis der kommer en lidt mere detaljeret løsning på dette ?
På forhånd tak !
Avatar billede burningice Nybegynder
07. september 2003 - 12:34 #5
altså.. en repeater er en kontrol som renderer dine data. Du kan også sagtens bruge DataList eller DataGrid... repeater og dog bare den mest enkle.

Ang. det med at det kun er den sidste der bliver vist... kunne man få lov at se noget kode, så jeg evt. kunne se hvor det går galt?
Avatar billede strafenmacher Nybegynder
07. september 2003 - 16:14 #6
Nu har jeg fået det til at fungere med en DataList. Den virker tilsyneladende perfekt. Det er selvfølgelig stadigt irriterende ikke at vide, hvorfor det ikke lod sig gøre med en Repeater, så derfor nedskriver jeg lige koden, hvis der skulle være nogen der har lyst til at se den igennem.


void Page_Load(Object Henrik, EventArgs E)
{                           
  Program klasseObjekt = new Program();
           
  string tabelnavn = "Galleri";

  //Sessionsobjekt hentet fra anden webform
  int katalogNr = Convert.ToInt16(Session["ValgtKatID"]);                                         
  DataSet datasetObjekt1 = new DataSet();

  //anvendelse af metode fra klassen Program (som ikke vises her,
  //-men den er der ikke problemer med !)
  datasetObjekt1= klasseObjekt.katalogBilleder(tabelnavn, katalogNr);        
  DataTable dTable = datasetObjekt1.Tables[0];
               
               
    foreach (DataRow dRow in dTable.Rows)
    {
      string filplacering = Convert.ToString(dRow[0]);
           
      DataTable objTable = new DataTable("NewTable");
                   
      objTable.Columns.Add("ImageUrl", Type.GetType("System.String"));
                     
      DataRow objDataRow;
      objDataRow = objTable.NewRow();

      objDataRow["ImageURL"] = filplacering;
      objTable.Rows.Add(objDataRow);
               
      MyRepeater.DataSource = objTable.DefaultView;
    }

    MyRepeater.DataBind();

}


<body>
  <ASP:Repeater id="MyRepeater" runat="server">

  <HeaderTemplate>
    <b><h1>Billeder fra valgte katalog</h1></b><br />
  </HeaderTemplate>

  <ItemTemplate>
    <asp:Image ID=billeder
          ImageUrl='<%# DataBinder.Eval
                                (Container.DataItem, "ImageURL") %>'
          width="300"
          runat=server />
  </ItemTemplate>

  <SeparatorTemplate>
    <b>Nyt billede !</b>
  </SeparatorTemplate>

  <FooterTemplate>
    <b>Her slutter billedserien</b>
  </FooterTemplate>
               
  </ASP:Repeater>
</body>
Avatar billede burningice Nybegynder
07. september 2003 - 16:59 #7
det er fordi at du sætter datasource på din repeater for hver row du har...

umiddelbart virker din kode lidt underligt, og og med at du for hver row i din dTable laver en NY table, men en NY row som du tilføjer til tabellen, og binder til din repeater.

Du skal altså kun oprette objTable EEN gang (uden for din foreach-løkke), og kun sætte din datasource EEN gang (også uden for din foreach-løkke).

så:

  DataTable objTable = new DataTable("NewTable");

    foreach (DataRow dRow in dTable.Rows)
    {
      string filplacering = Convert.ToString(dRow[0]);
           
      objTable.Columns.Add("ImageUrl", Type.GetType("System.String"));
                     
      DataRow objDataRow;
      objDataRow = objTable.NewRow();

      objDataRow["ImageURL"] = filplacering;
      objTable.Rows.Add(objDataRow);
    }

      MyRepeater.DataSource = objTable.DefaultView;

mon ikke det skulle hjælpe?
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
Kurser inden for grundlæggende programmering

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