webForumDet fria alternativet

Byta bild i repeater

.NET

4 svar · 188 visningar · startad av NETwork

Medlem sedan juni 20011 732 inlägg
Frågan#1

Jag har en repeater som jag fyller med en array bestående av filnamn på filer i en katalog.

ArrayList Catalog = new ArrayList(Directory.GetDirectories(Request.PhysicalApplicationPath+"Galleriet"));
ArrayList theList = new ArrayList();
foreach(string i in Catalog)
theList.Add(new PositionData(Path.GetFileName(i)));
theList.Reverse(0,theList.Count);

CatalogRepeater.DataSource = theList;
CatalogRepeater.DataBind();

I repeatern har jag en imagebutton. När jag klickar på den så vill jag byta ut dess bild mot en annan. Men hur vet jag på vilken rad jag befinner mig i repeatern och hur ändrar jag imageurl på min imagebutton på just den raden?

------------------
Jag kan inte komma på någon signatur.

Medlem sedan juni 20011 732 inlägg
#2

Jag lyckades ändra bilden. :)

ImageButton openCatalog = (ImageButton)sender;
openCatalog.ImageUrl = "Galleriet/katalog_oppen.gif";

Men ett nytt problem! När jag har ändrat bilden och trycker på imagebuttonen på en annan rad så vill jag att den förra imagebuttonen ska få den gamla bilden igen. Jag skulle alltså behöva loopa igenom hela repeatern och sätta imageurl på alla - först sätta standardbilden på alla knappar i repeatern, sen sätta den nya bilden på den imagebutton som jag tryckt på.

Men hur loopar jag igenom repeatern och sätter imageurl på alla!?

------------------
Jag kan inte komma på någon signatur.

[Redigerat av NETwork den 21 jan 2002]

Medlem sedan juni 20011 732 inlägg
#3

Ah! Jag lyckades med detta också. Fan va duktig jag är. ;)

foreach(RepeaterItem item in CatalogRepeater.Items) {        
((ImageButton)item.Controls[1]).ImageUrl = "Galleriet/katalog.gif";
}

Så nu vet ni det!

------------------
Jag kan inte komma på någon signatur.

Medlem sedan mars 20007 896 inlägg
#4

Jag tycker att det är super att du redovisar hur du löste problemen, för att dela med dig till andra! Vissa skriver bara "Jag löste det.", vilket är lite trist för andra som har problem med samma sak / vill lära sig.

Toppen!

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

Medlem sedan juni 20011 732 inlägg
#5

Ja, det är kanske ett par stycken som vill se lite kod nu när det förmodligen är många som precis har/ska börja koda c#/vb.net/etc på .net. Sen kanske man inte ska ta min kod på allt för stort allvar, jag är knappt en glad amatör. Men den funkar iaf! :)

Om det är någon som undrar vad jag har gjort så håller jag på med en funktion som först plockar ut alla underkataloger i en given katalog, lägger filnamnet för varje katalog i en array (som jag fyller min repeater med). När du klickar på en given katalog så hämtar jag på samma sätt alla filer som finns i den katalogen (i mitt fall bilder) och skapar en ny array med alla filnamn, som sedan blir en länk på sidan som öppnar bilden. Så nu behöver jag bara skapa en katalog, dundra i lite filer där och voila så ligger de automatiskt färdiglänkade på internet. :)

Här är lite mer kod som jag har lärt mig när jag gjort den här funktionen:

Request.PhysicalApplicationPath

Hämtar hela sökvägen till den katalog där filen jag skriver detta i befinner sig.

Directory.GetDirectories("sökvägen")

Hämtar alla kataloger i den givna sökvägen.

Path.GetFileName("sökvägen")

Hämtar filnamnet på alla filer i den aktuella katalogen.

Path.GetFileNameWithoutExtension("sökvägen")

Hämtar filnamnet UTAN filändelse på alla filer i den aktuella katalogen.

Anledningen till att jag först skapar en arraylist för katalogerna och filerna och sen skapar en arraylist till (theList) som jag fyller filnamnen med från den första arrayen...

ArrayList Catalog = new ArrayList(Directory.GetDirectories(Request.PhysicalApplicationPath+"Galleriet"));

ArrayList theList = new ArrayList();
foreach(string i in Catalog) {
			
theList.Add(new PositionData(Path.GetFileName(i), Path.GetFileNameWithoutExtension(i) ... );
}

CatalogRepeater.DataSource = theList;
CatalogRepeater.DataBind();

...beror på att jag vill kunna stoppa in och visa flera olika data i min repeater, ungefär som om jag hade en dataset. Annars kan jag ju bara lägga till de värden som jag har i min array, men jag behövde kunna skriva ut både filnamn, filnamn utan filändelse och sökvägen till en viss katalog. För att fixa detta har jag skapat en klass som jag kallar för PositionData. Den ser ut ungefär så här:

public PositionData(string first) {
this.first = first.Trim();
}
public PositionData(string first, string second) {
this.first = first.Trim();
this.second = second.Trim();

osv...

public string First {
get {
return first;
}
}

public string Second {
get {
return second;
}
}

Så kan jag skyffla in data i repeatern:

theList.Add(new PositionData(Path.GetFileName(i), Path.GetFileNameWithoutExtension(i) ... );

Och hämta dem i min repeater:

<%# DataBinder.Eval(Container.DataItem, "first") %>
<%# DataBinder.Eval(Container.DataItem, "second") %>

------------------
Jag kan inte komma på någon signatur.

[Redigerat av NETwork den 21 jan 2002]

260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)