wint100
asked on
PAssing QueryString to Codebehind in Same aspx page
I'm developijg a web app in .NET 3.5SP1 using VS2008.
I'm having problems when passsing a parameter to the codebehind. The first part of the code below is the javascript used to render a chart by passing parameters to the codebehind, and retrieving the xaml data back that is required to render the chart. The second part is the code behind in the SAME aspx page.
The problem I have is that if I try to populate and bind the GridView within the 'if (Request.Querystring[DataS eriesIndex ] == "none")' statement, the Grid isn't getting populated. The ChartXaml is returned OK, but the girdview is always empty. If I remove the GridView binding from the querystring statement, the gridview populates and binds fine. For some reason when trying to populate within this statement, it is preventing the GridView from being populated and binding.
I've tested this by debugging the code line by line, and the Values used to populate the gridview ARE set to the correct values, but for soe reason the gridview isn't binding. I've also tried taking the GridView1.DataBind() out of the statement, and putting it into the 'Finally' part, but this still doesn't work.
I've also tried:
string index =Request.Querystring[DataS eriesIndex ];
And then using this for the IF statement, but this does the same thing. And also tried calling a seperate void, if Index =="none".
The code inside the IF statement IS firing, because the ChartXaml is being returned ok. Maybe I need to send a seperate call from javascript? I trying to call the dataTable into javascript and bind in javascript??
Can anyone help here??
I'm having problems when passsing a parameter to the codebehind. The first part of the code below is the javascript used to render a chart by passing parameters to the codebehind, and retrieving the xaml data back that is required to render the chart. The second part is the code behind in the SAME aspx page.
The problem I have is that if I try to populate and bind the GridView within the 'if (Request.Querystring[DataS
I've tested this by debugging the code line by line, and the Values used to populate the gridview ARE set to the correct values, but for soe reason the gridview isn't binding. I've also tried taking the GridView1.DataBind() out of the statement, and putting it into the 'Finally' part, but this still doesn't work.
I've also tried:
string index =Request.Querystring[DataS
And then using this for the IF statement, but this does the same thing. And also tried calling a seperate void, if Index =="none".
The code inside the IF statement IS firing, because the ChartXaml is being returned ok. Maybe I need to send a seperate call from javascript? I trying to call the dataTable into javascript and bind in javascript??
Can anyone help here??
function GetXMLHttpObj() {
try {
// Firefox, Opera 8.0+, Safari
objXmlHttp = new XMLHttpRequest();
}
catch (e) {
// Internet Explorer
try {
objXmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
objXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
alert("Your browser does not support AJAX!");
return null;
}
}
}
return objXmlHttp;
}
// Loads Visifire Chart
function onLoad() {
var xmlHttp1 = GetXMLHttpObj();
xmlHttp1.onreadystatechange = function() {
if (xmlHttp1.readyState == 4) {
vChart.setDataXml(xmlHttp1.responseText.substr(0, xmlHttp1.responseText.indexOf("<!DOCTYPE ")));
//Added for Drilldown------------------------------
vChart.preLoad = function(args) {
chart = args[0];
chart.Series[0].MouseLeftButtonUp = function(e) {
OnDataSeries1MouseLeftButtonUp(e.AxisXLabel);
};
//}
};
//-------------------------------
vChart.render("Visifire1");
}
}
// Sending request
xmlHttp1.open("GET", "AnnualEnergyChart.aspx?action=GetXML1&DataSeriesIndex=none&id=" + rID, true); // Request sent for first chart data (GetXML1);
xmlHttp1.send(null);
var xmlHttp2 = GetXMLHttpObj();
xmlHttp2.onreadystatechange = function() {
if (xmlHttp2.readyState == 4) {
vChart2.setDataXml(xmlHttp2.responseText.substr(0, xmlHttp2.responseText.indexOf("<!DOCTYPE ")));
//Added for Drilldown------------------------------
vChart2.preLoad = function(args) {
chart2 = args[0];
chart2.Series[0].MouseLeftButtonUp = function(e) {
OnDataSeries1MouseLeftButtonUp(e.AxisXLabel);
};
//}
};
//----
vChart2.render("Visifire2");
}
}
// Sending request
xmlHttp2.open("GET", "AnnualEnergyChart.aspx" + "?action=GetXML2&DataSeriesIndex=none&id=" + rID, true); // Request sent for first chart data (GetXML1);
xmlHttp2.send(null);
}
----------------------------------------------------------------
c# code behind in the same page
if (Request.Querystring[DataSeriesIndex] == "none")
{
dt = Single_Data(sDate, MeterName);
if (count == 1)//The following is called only when a single date is selected
{
chartXaml1 = chart1_single_dt(dt, SDate, Units, MeterName_Name);
chartXaml2 = chart2_single_dt(dt, SDate, Units, MeterName_Name);
}
DataTable Master = new DataTable();
double Day_Total1 = new int();
double Cost1 = new int();
string Units = " kWh";
if (dt.Compute("sum(MthData)", "") != DBNull.Value)
{
Day_Total1 = System.Convert.ToDouble((dt1.Compute("sum(MthData)", "")));
Cost1 = System.Convert.ToDouble((dt1.Compute("sum(TotalCost)", "")));
}
DataColumn mycolumn1 = new DataColumn();
mycolumn1.ColumnName = "Meter";
Master.Columns.Add(mycolumn1);
DataColumn mycolumn2 = new DataColumn();
mycolumn2.ColumnName = "Total";
Master.Columns.Add(mycolumn2);
DataColumn mycolumn3 = new DataColumn();
mycolumn3.ColumnName = "Cost";
Master.Columns.Add(mycolumn3);
DataRow row = Master.NewRow();
row["Meter"] = MeterName_Name + " " + DateTime.Parse(sDate).ToString("yyyy");
row["Total"] = Math.Round(Day_Total1, 0).ToString() + " " + Units;
row["Cost"] = "£ " + Math.Round(Cost1, 2).ToString();
Master.Rows.Add(row);
BoundField Meter = new BoundField();
Meter.DataField = "Meter";
Meter.HeaderText = "";
Meter.ItemStyle.HorizontalAlign = HorizontalAlign.Left;
Meter.ItemStyle.Width = 400;
BoundField Total = new BoundField();
Total.DataField = "Total";
Total.HeaderText = "Total";
Total.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
Total.ItemStyle.Width = 150;
BoundField Cost = new BoundField();
Cost.DataField = "Cost";
Cost.HeaderText = "Cost";
Cost.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
Cost.ItemStyle.Width = 150;
GridView1.Columns.Add(Meter);
GridView1.Columns.Add(Total);
GridView1.Columns.Add(Cost);
GridView1.DataSource = Master;
GridView1.DataBind();
}
ASKER
That is a typo on my post only, the code has the quotes.
I've tried both of the above but still have the same issue.
I've tried both of the above but still have the same issue.
Please put a breakpoint at:
if (Request.QueryString["Data SeriesInde x"] == "none")
and post the Request.Querystring properties that you can see in the debugger
I also need the url that request is receiving (from debugger not from your code).
Also. let me know if your C# code is executing in Page_Load event.
http://dotnetperls.com/querystring-net
if (Request.QueryString["Data
and post the Request.Querystring properties that you can see in the debugger
I also need the url that request is receiving (from debugger not from your code).
Also. let me know if your C# code is executing in Page_Load event.
http://dotnetperls.com/querystring-net
ASKER
The code is all executing in the pageLoad event yes.
OnLoad() in java the Request is sent as xmlHttp1.open("GET", "AnnualEnergyChart.aspx?ac
And the dubugger shows: Request.QueryString = {action=GetXML1&Date=Mon+1
OnEventRun, the code is run again but with DataSeriesIndex as a different value, on the event, the debugger showed that the querystring was receving the value. The Values being bound to the Gridview were all correct, and the grid columns were set to the correct size, width etc.. programatically, although the gridview on the page was still blank? Maybe the Gridview is being rendered before the codebehind has finished binding the data?
Here is the debug info from the OnEvent():
Request.QueryString = {action=GetXML1&Date=Mon+1
From the dubugger, it looks like the pageload event is fired straight away, before the Java Event for "Body onload ="onLoad()" is run. So the pageload event behind, first runs with index=null, and bind the gridview to a blank datasource. Then when the OnLoad() event fires, it isn't updating the gridview. Maybe I need an update panel??
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
My problem with using 2 pages was how to return a datatable from the helper page, the the chart page and also how to then populate the gridview.
ASKER
I still do not understand why the Chartxaml is being returned, but the gridview is not binding, or being updated.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Sounds interesting. I'll look into frames. thanks
ASKER
Sounds interesting. I'll look into frames. thanks
ASKER
The iframe seems to have done the trick for the initial load. The only problem I have now is updating the iframe on button click.
onLoad of form I'm setting the source of the iframe as 'Data.aspx?index=0'. Data.aspx is my helper page. This works great when page is intitially loaded. OnClick i'm changing iframe source to 'Data.aspx?index=1', but the gridview just disappears from the page, so no data is being returned.
Am I missing something here? How can I reload Data.aspx, sending querystring 'index=1' onClick?
onLoad of form I'm setting the source of the iframe as 'Data.aspx?index=0'. Data.aspx is my helper page. This works great when page is intitially loaded. OnClick i'm changing iframe source to 'Data.aspx?index=1', but the gridview just disappears from the page, so no data is being returned.
Am I missing something here? How can I reload Data.aspx, sending querystring 'index=1' onClick?
ASKER
I wasn't sending the correct querytring back to the data.aspx page when trying to reload the iframe. This is now fixed.
So when the button is clicked, the source is altered:
var iframe = document.getElementById('f rame1'); // just for clarity
iframe.src = 'Data.aspx?index=0';
All working now, thanks
So when the button is clicked, the source is altered:
var iframe = document.getElementById('f
iframe.src = 'Data.aspx?index=0';
All working now, thanks
string index =Request.Querystring["Data
or replace line 91 with:
if (Request.Querystring["Data
You are missing the quotes.