Page 1 of 2
ASP.NET zooming with Financial Volume Graph
Posted: Tue Apr 01, 2008 7:59 pm
by 14046718
Hi,
I'm working on a ASP.NET app in VS 2005 which uses a Volume Graph.
The graph gets data from a database which is stored in a C# DataSet then series are addeed based on the contents of the dataset. The graph is rendered correctly, however when I attempt using the ZOOM tool, with post back, I get an empty graph - the axis labels look correct but there is NO data.
Any ideas?
thanks,
Rich
Posted: Wed Apr 02, 2008 8:37 am
by narcis
Hi Rich,
Could you please send us a simple example project we can run "as-is" to reproduce the problem here? You may use random data or a dataset as in the example Christopher Ireland posted
here
You can either post your files at news://
www.steema.net/steema.public.attachments newsgroup or at our
upload page.
Thanks in advance.
poseted files
Posted: Wed Apr 02, 2008 5:43 pm
by 14046718
I have a Database object that supplies data - as you';ll see in the code...you can change those db.... calls to random data I suppose - but it's probably important that the data is then staored in dataseets.
thanks,
Rich
Posted: Thu Apr 03, 2008 7:21 am
by narcis
Hi Rich,
Thanks for the code. However I'm not able to run and debug it here as it uses a number of controls we don't have here.
At first glance I see that you call CheckZoom method twice, in the ChartSession method and in Page_Load. I recommend you to try removing the call at ChartSession.
Also notice that for using zoom you should set chart's AutoPostback to false.
If this doesn't help please send us a simple example project we can run "as-is" to reproduce the problem here.
Thanks in advance.
GetChart?
Posted: Thu Apr 03, 2008 1:38 pm
by 14046718
Hi,
Thanks for your quick response! I'll see if I can put together someting simple to send...in the meantime I have a question. If I'm using "httpHandler" for TempChart, do I still need a GetChart.aspx file?
Also, since the data I'm filling the chart with data stored in a Session variable of type DataSet, Will this variable need to be retrieved and again tied to the Chart during the checkZoom postback?
thanks,
Rich Heim
Another question
Posted: Thu Apr 03, 2008 1:40 pm
by 14046718
Sorry - one more question:
Has the TeeChart ASP.NET library been tested with Microsoft's ASP.NET AJAX extensions?
thanks again,
Rich
More Files
Posted: Thu Apr 03, 2008 2:27 pm
by 14046718
I sent a simple example today w/o ajax.
Files are Default.aspx, Default.aspx.cs, config.xml, and DataBaseExample.cs
thanks,
Rich
Web.config
Posted: Thu Apr 03, 2008 2:29 pm
by 14046718
Opps!
Make that web.config NOT config.xml
thanks again
Rich
Posted: Thu Apr 03, 2008 3:00 pm
by narcis
Hi Rich,
Thanks for your quick response! I'll see if I can put together someting simple to send...in the meantime I have a question. If I'm using "httpHandler" for TempChart, do I still need a GetChart.aspx file?
No, in that case it's not necessary, you just need to modify web.config as described in
Tutorial 9 - TeeChart and WebChart and ASP.NET. Tutorials can be found at TeeChart's program group.
Also, since the data I'm filling the chart with data stored in a Session variable of type DataSet, Will this variable need to be retrieved and again tied to the Chart during the checkZoom postback?
It is not strictly necessary as when exporting/importing the chart to the MemoryStream it already includes its data.
I also strongly recommend you to read
this thread about similar issue.
Has the TeeChart ASP.NET library been tested with Microsoft's ASP.NET AJAX extensions?
TeeChart for .NET v3 supports AJAX and can be used in an UpdatePanel to limit any repaints to that page zone alone. TeeChart also offers some specific optimisations using AJAX clientside code to permit scrolling without a return trip to the server and to capture Chart zoom requests.
There are some live examples of that included with the
live ASP.NET demo, like the scrolling example, if you'd like a closer look.
I sent a simple example today w/o ajax.
Files are Default.aspx, Default.aspx.cs, config.xml, and DataBaseExample.cs
Great, thanks! I'll check it out ASAP.
Posted: Fri Apr 04, 2008 9:04 am
by narcis
Hi Rich,
I sent a simple example today w/o ajax.
Files are Default.aspx, Default.aspx.cs, config.xml, and DataBaseExample.cs
I've checked your example but I'm not able to build it here. The problem is in this line:
Code: Select all
private Database db = Database();
Visual Studio give me this error message:
The type or namespace name 'Database' could not be found (are you missing a using directive or an assembly reference?)
I thought
Database may be referring to
Microsoft.AnalysisServices.Database but it isn't as using this type produces several other errors of non-existing methods in the type.
Could you please let us know how can we build your project successfully or send us a simple example project we can run "as-is" here?
Thanks in advance.
new file
Posted: Mon Apr 07, 2008 1:10 pm
by 14046718
Hi,
I've uploaded a zip file called testforSteema.zip which should compile for you. Of course the database object, which is my own object responsible for communicating with an Oracle database, won't connect for you. However, you can change modify this to work with random data.
NOTE: The graph displays about 12,000 data points.
thanks,
Rich
Posted: Mon Apr 07, 2008 2:57 pm
by narcis
Hi Rich,
Thanks for the example project. I've modified it using random data and worked fine for me here:
Code: Select all
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FillChart();
getDetailedData();
}
ChartSession();
CheckZoom(WebChart1);
}
protected void FillChart()
{
Steema.TeeChart.Chart chart1 = WebChart1.Chart;
Steema.TeeChart.Styles.Volume series1 = (Steema.TeeChart.Styles.Volume)chart1.Series[0];
chart1.Tools.Add(new Steema.TeeChart.Tools.ZoomTool());
((Steema.TeeChart.Tools.ZoomTool)chart1.Tools[0]).ZoomPenColor = Color.OliveDrab;
series1.XValues.DateTime = true;
chart1.Axes.Bottom.Labels.DateTimeFormat = "MM/yyyy";
chart1.Axes.Bottom.Labels.MultiLine = true;
chart1.Panel.MarginBottom = 10;
// Legend
Steema.TeeChart.Legend legend = chart1.Legend;
legend.ImageMode = Steema.TeeChart.Drawing.ImageMode.Stretch;
series1.Clear();
series1.DataSource = getSummaryData();
series1.XValues.DataMember = "ARRDATE";
series1.YValues.DataMember = "ARRTIME";
series1.LabelMember = "LABELS";
series1.CheckDataSource();
}
private DataTable getSummaryData()
{
DataTable myData = new DataTable ();
DataColumn ARRDATE = new DataColumn("ARRDATE", Type.GetType("System.DateTime"));
DataColumn ARRTIME = new DataColumn("ARRTIME", Type.GetType("System.Double"));
DataColumn LABELS = new DataColumn("LABELS", Type.GetType("System.String"));
myData.Columns.Add(ARRDATE);
myData.Columns.Add(ARRTIME);
myData.Columns.Add(LABELS);
DataRow dataRow;
DateTime myTime = DateTime.Now;
for (int i = 0; i < 12000; i++)
{
dataRow = myData.NewRow();
dataRow[ARRDATE] = myTime.AddDays(i);
TimeSpan elapsedTime = new TimeSpan(DateTime.Now.Ticks - myTime.Ticks);
dataRow[ARRTIME] = elapsedTime.Ticks;
dataRow[LABELS] = "Point number" + (i + 1).ToString();
myData.Rows.Add(dataRow);
}
return myData;
}
private DataTable getDetailedData()
{
return getSummaryData();
}
protected void ChartSession()
{
Steema.TeeChart.Chart ch1 = WebChart1.Chart;
MemoryStream tmpChart = new MemoryStream();
if (Session["WebChart1"] == null)
{
//export Chart to a MemoryStream template
ch1.Export.Template.Save(tmpChart);
//save template to a Session variable
Session.Add("WebChart1", tmpChart);
}
else
{
//retrieve the session stored Chart
tmpChart = (MemoryStream)Session["WebChart1"];
//set the Stream position to 0 as the last read/write
//will have moved the position to the end of the stream
tmpChart.Position = 0;
//import saved Chart
WebChart1.Chart.Import.Template.Load(tmpChart);
}
}
private void CheckZoom(WebChart wChart)
{
ArrayList zoomedState = (ArrayList)Session[wChart.ID + "Zoomed"];
if (wChart.Chart.Tools.Count > 0)
{
zoomedState = ((Steema.TeeChart.Tools.ZoomTool)wChart.Chart.Tools[0]).SetCurrentZoom(Request,
zoomedState);
if (zoomedState == null)
Session.Remove(wChart.ID + "Zoomed");
else
Session.Add(wChart.ID + "Zoomed", zoomedState);
}
}
}
Does it work fine at your end? Could you please modify it so that we can reproduce the problem here?
Thanks in advance.
Nope
Posted: Mon Apr 07, 2008 5:41 pm
by 14046718
Thanks for looking at it - but it doesn't work here. After a zoom I get no data back.
Could it be file or directory permissions on the workstation I'm using (I do NOT have administrative access on this machine)?
Are you using httphandler?
I'm running it it within the Visual Studio 2005 environment...I don't have priveledges to modify IIS ... could this be a problem? How is the data/graph cached when using httpHandler?
thanks,
Rich
Posted: Tue Apr 08, 2008 9:45 am
by narcis
Hi Rich,
Yes, I'm using Httphandler. In your prjoect I just modified the sources I posted. Which exact TeeChart for .NET v3 release are you using? Could you please try using the
version posted last Friday?
Setting TempChartStyle.Httphandler, the chart is passed as an image in Context.Cache.
Thanks in advance.
Thanks
Posted: Tue Apr 08, 2008 12:53 pm
by 14046718
I'll try the latest release
Rich