Ok ti posto del codice e al limite poi creo un articolo per tutti.
Prima cosa aggiungi i riferimenti ai seguenti namespace:
using System.Drawing;
Poi inizi a scrivere:
Pen p;
Bitmap bmp = new Bitmap(430, 430, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
dopodichè sei abilitato a fare un po' quello che ti pare semplicemente scrivendo:
g.DrawString(...);
g.DrawCurve(...);
g.DrawRectangle(..);
ecc., nel tuo caso specifico devi fare dei ragionamenti in base al datatable che possiedi con un po' di matematica, faccio un esempio: se il datatable è così composto:
riga 1: 5 4 3 2
riga 2: 3 5 7 9
capisci che non ha senso creare un grafico a barre a meno che di ogni riga o di ogni colonna ne fai la somma, sembra più un grafico stacked bar che una bar line (vedi excell per chiarimenti sui tipi di grafico esistenti). Supponiamo quindi di creano un grafico riferito solo alla prima riga, abbiamo 4 valori i cui il maggiore è 5. Ora devi convertire i valori in punti sulla bitmap. Supponendo di iniziare a disegnare dal punto (x:15,y:430) e supponendo che ogni barra sia larga per comodità 80px, ci saranno 4 chiamate a g.DrawRectangle a cui passi le coordinate:
g.drawRectangle(15,430,15+(80x1),430-(80x5));
g.drawRectangle(15,430,15+(80x2),430-(80x4));
g.drawRectangle(15,430,15+(80x3),430-(80x3));
g.drawRectangle(15,430,15+(80x4),430-(80x2));
Come un occhio attento potrà notare il codice è ottimizzabile con un ciclo foreach.
Alla fine basta che scrivi:
bmp.Save(pathImmagine,ImageFormat.PNG);
g.Dispose();
Importante è che il pathImmagine abbia estensione PNG, e alla fine associ l'immagine creata al tuo oggetto asp:Image che ipotesi si chiama pippo:
pippo.ImageUrl = pathImmagine;
se hai dubbi chiedi pure.