Hej, Hej! Hej, Pröva att ställa din fråga i forumet på www.asp.net, det är den officiella sajten för asp.net och där är det oerhört många fler som läser inläggen.Dynamisk positionering i GridView
Vet inte om detta är rätt forum, men jag provar....
Jag har en gridview som ligger inne i en div-tag. Denna div-tag kan man scrolla åt alla håll.
För varje rad kan man klicka på en ikon i en av cellerna och då öppnas ett div lager med lite info i.
Det är SAMMA lager som visas på varje rad i gridview:n.
Detta lager har jag lyckats positionerat att positionera snyggt precis bredvid ikonen.
Problemet är att när man scrollar div:en(gridview:n) så blir positioneringen fel.
Javascriptet har jag hittat någonstans och jag vet inte vad jag ska ändra för att få det att fungera?
Någon som kan hjälpa mig?
Här kommer koden:
Div:en som visas när man klickar på ikon för varje rad:
<div id="mnuColor" name="" onMouseOver="Javascript:showHideColors(this, 'open');" onMouseOut="Javascript:showHideColors(this, 'close');" style="display:none; position:absolute; top:203px; left:922px; z-index:1001;">
Lite färger.....
</div>
Detta är anropen som görs för varje rad:
<code>
Dim img As System.Web.UI.WebControls.Image = DirectCast(e.Row.FindControl("imgColor"), System.Web.UI.WebControls.Image)
img.Attributes.Add("onclick", "showHideColors(this,'open');")
</code>
Här kommer javascriptet:
<code>
function showHideColors(obj, action)
{
var srcElement = window.event.srcElement;
obj.document.parentWindow.event.cancelBubble='true';
if (action == 'close')
{
document.all.mnuColor.style.display = "none";
}
else
{
document.all.mnuColor.style.display = "";
if (obj.id != 'mnuColor')
{
document.all.mnuColor.name = obj.id;
document.all.mnuColor.style.left = f_GetLeftPos(obj);
document.all.mnuColor.style.top = f_GetTopPos(obj);
}
}
}
function f_GetTopPos(obj)
{
return f_DoPosLoop(obj, "Top");
}
function f_GetLeftPos(obj)
{
return f_DoPosLoop(obj, "Left");
}
function f_DoPosLoop(obj, val)
{
var temp = obj;
var x = eval("temp.offset" + val);
while ((temp.tagName != "BODY") && (temp.offsetParent.style.position != "absolute"))
{
temp = temp.offsetParent;
x += eval("temp.offset" + val);
}
return x;
}
</code>
Det funkar som sagt tills man scrollar i div:en.
Jag bugar o bockar på förhand!!!
/Jocke
Sv: Dynamisk positionering i GridView
Svårt att säga vad det kan vara för fel. Men varför använder du inte en asp:Panel istället för en div? En asp:Panel fungerar bättre ihop med asp.net kod. Och i en asp:Panel kan man ange attributet ScrollBars, kanske fungerar bättre att ha en asp:Panel ihop med en asp:GridView så att det blir asp.net och inte html-kod på båda ställen så att säga.
Bara en fundering jag hade, vet inte om den fungerar.
Men jag själv hade problem när jag använde css för att skapa scrollbars i en panel istället för asp.net attributet ScrollBars på en Panel.
Och en asp:Panel generar en div som html-kod.
mvh PerSv:Dynamisk positionering i GridView
Tack för ditt svar!
Jag använder en asp:panel, eller rättare sagt en "egen" komponent som ärver asp:panel.
Javascriptet körs ju sedan på div-taggen som genereras, det var därför jag skrev så.
Sen har jag ju en div, "mnuColor", som ska visas för varje rad. Men det ska ju inte scrollas, utan bara positioneras.
Själva scrollningen i sig fungerar, det är postioneringen som inte funkar när man scrollar div:en.
Jag har för dålig koll på javascript och css för att förstå vad som är fel med koden jag hittat.
Scriptet är gammalt och det finns säkert mycket bättre sätt att göra detta på?
Några idéer?
/JockeSv:Dynamisk positionering i GridView
mvh Per