Har en gridview med en kolumn knappar och en kolumn med image-kontroller. GridView:en ligger i en usercontrol som dynamiskt laddas in på sidan (a.aspx). Spontant tänkte jag nu att kolla vad filnamnet är på kontrollen. Antingen är den checked eller deleted eller liknande, det namnet gif-bilden har kan du således nyttja för att veta vad som "gäller". Hittade en lösning.Ska det gå att ta fram ett objekt med getElementByID via dess ClientID som spara
Vid tryck på en av knapparna på a.aspx ska en ny sida öppnas (b.aspx) med window.open(...) där det finns två knappar Save & Cancel.
Vid tryck på Save ska bilden i image-kontrollen på sidan a.aspx bytas ut (med hjälp av javascript) utan att sidan laddas om.
Mina funderingar är:
För att kunna byta ut bilden på image-kontrollen (imgStatus) i gridview:en måste veta vilken image-kontroll det rör sig om. Det kan jag lägga till (No-)knappen ungefär så här...
<code>
btnNo.OnClientClick = "setImgStatusClientID('" + imgStatus.ClientID.ToString() + "'); return false;";
</code>
Eftersom jag inte i första läget kan ändra bilden (vid tex klick på knappen) på a.aspx sparar jag undan värdet för imgStatus.ClientID.ToString() till ett hiddenfield för att sedan kunna ta fram objektet och sätta bilden.
När det är dax att ändra bilden läser jag tillbaka värdet från hiddenfield och sedan tänkte jag få tag på objektet imgStatus genom document.getElementByID(hiddenfield.value); Där hiddenfield = det id som image-kontrollen har, tex ctl02_GridView1_ctl08_imgStatus som jag tidigare sparade undan i hiddenField-kontrollen.
Som sagt så får jag inte tag på något imgStatus-objekt...
Ska det här gå att göra?
Eller kan det finnas ett bättre sätt att "spara undan" vilken imgStatus-kontroll det gäller för att sedan få tag på kontrollen (objektet) för att tilldela den en annan bild...
/JesperSv: Ska det gå att ta fram ett objekt med getElementByID via dess ClientID som s
Sv: Ska det gå att ta fram ett objekt med getElementByID via dess ClientID som s
För att komma åt asp:image objektet/kontrollen och ändra bilden hämtar jag först objektet 'hfImgStatusClientID' - se funktionen gethfImgStatusClientID_Object() som är det hidden field där ClientId för asp:image sparats sedan tidigare, (detta är den image-kontroll som ligger på samma rad i gridview:en som knappen man klickar på)
och returnerar referensen tillbaka till funktionen getImageControlID()
där jag sedan läser ut ClientID-värdet för asp:image controllen.
Hämtar och returnerar referensen till image-kontrollen med
imgStatusID = document.getElementById(imgStatusValue);
}
return imgStatusID;
till funktionen ChangeStatusImage() där bilden ändras med imgStatusID.src='./Images/error.gif';
En orsak till att det inte fungerade var stavningen av bildens source var scr och inte src som ovan...
Så inga konstigheter alltså... det är bara använda getElementById och clientID som parameter.
/Jesper
Koden:
//Ändra bilden i GridView:en
function ChangeStatusImage()
{
var imgStatusID = getImageControlID();
if(imgStatusID != null)
{
//Byt bild!
imgStatusID.src='./Images/error.gif';
}
}
//Hämta referensen till objektet imgStatus var värde sparades i hidden field...
function getImageControlID()
{
var elementhfImgStatusClientID = gethfImgStatusClientID_Object();
var imgStatusValue;
var imgStatusID;
if(elementhfImgStatusClientID != null)
{
//Hämta ut sparade värdet för kontrollen
imgStatusValue = elementhfImgStatusClientID.value;
if(imgStatusValue != null)
{
//Hämta referensen till objektet
imgStatusID = document.getElementById(imgStatusValue);
}
}
return imgStatusID;
}
function gethfImgStatusClientID_Object()
{
return document.getElementById('hfImgStatusClientID');
}