Har hittat lite kod för att rita grafer som jag vill lägga i min asp.net sida. Ett sätt är att anropa koden som skapar grafen i en ashx-fil (eller aspx funkar ju givetvis också) och låta den returnera bilden. Sedan använder du den sidan som url till din Image. Men hur löser jag då att få över värden till den sidan? Ett sätt om det inte är så mycket är att skicka det som querystring-variabler, men det är kanske inte en speciellt snygg lösning och då faller nog denna lösningen. Tackar Johan att du kämpar på även på en söndag. Oops hittade nått som heter MSChart och ska funka för asp.net Testat med MSChart nu och fungerar som jag hade tänkt som en linjegraf.Bild från class till image på sida
(Använder VS 2008)
Koden skapar en bitmap i en class och ritar grafen i den bitmappen den skapade.
Nu försöker jag överföra bitmappen från classen till en image jag har på sidan men får det inte att funka.
lite kod från classen
Public b As Bitmap
Public Sub New(ByVal myWidth As Integer, ByVal myHeight As Integer, ByVal myPage As Page)
Width = myWidth
Height = myHeight
ScaleX = myWidth
ScaleY = myHeight
b = New Bitmap(myWidth, myHeight)
g = Graphics.FromImage(b)
p = myPage
End Sub
sedan kod i classen för att rita grafen
Public Sub Draw()
.....
.....
den funkar men skriver direkt till sidan
b.Save(p.Response.OutputStream, ImageFormat.Jpeg)
men vill inte skriva grafen direkt till sidan utan till en image ruta
(jag skickar med Page till classen men ska plocka bort det sedan då jag vill ha bilden direkt)
Sedan så använder jag klassen med lite data och försöker få tillbaka resultatet till en Image
Dim c As LineChart = New LineChart(640, 480, Page)
'
c.Title = "My Line Chart"
c.Xorigin = 0
c.ScaleX = 500
c.Xdivs = 5
c.Yorigin = 0
c.ScaleY = 1000
c.Ydivs = 5
c.AddValue(50, 50)
c.AddValue(100, 100)
c.AddValue(200, 150)
c.AddValue(450, 450)
c.Draw()
Image1.ImageUrl = ??????
mvh RolandSv: Bild från class till image på sida
Image1.ImageUrl = "Min.ashx"
/JohanSv:Bild från class till image på sida
t.ex.
c.AddValue(50, 50)
c.AddValue(100, 100)
c.AddValue(200, 150)
c.AddValue(450, 450)
mvh RolandSv: Bild från class till image på sida
Lite andra tänkbara lösningar:
- Spara ner grafen som en temporär fil med slumpat namn som du sedan visar.
- Spara parametrarna du vill visa någonstans (db kanske?) tillsammans med en unik identitet. Skicka sedan med denna identitet som querystring till ashx-filen som kan hämta upp grafens innehåll igen.
/JohanSv:Bild från class till image på sida
Din lösning att skicka en aspx sida till en imagekontroll funkar bra, har provat nu.
Querystring släppte jag omgående då det ibland kan vara många värden som ska ut på grafen.
Att lagra som en fil har jag redan testat men är ingen snygg lösning.
Att spara i en databas är heller inget bra då det åtgår databas läsande och skrivande utan egentlig nytta samt att man sedan får rensa bort data i basen.
Fundera nu på att lagra i en sessionvariabel som kan innehålla strukturer och allt nödvändig data.
Har använt detta en hel del för att föra över information mellan olika sidor i applikationer (samma session) Blir alltså typ globala variabler inom sessionen.
Däremot trist då det renaste hade varit att använda grafen som en class direkt och göra add på data för respektive kurva mm och sedan ge order om rita och därefter plocka in den i image controllen direkt.
Även trist men lärorikt att det inte finns något klart för grafer i VS2008 för asp.net, borde varit en självklarhet då man vill bygga mer webblösningar istället för windows app.
mvh RolandSv: Bild från class till image på sida
/RolandSv:Bild från class till image på sida
Tackar för hjälpen Johan
mvh Roland