private void BuildChart(DataTable labs) { SessionHandler sh = new SessionHandler(Session); int patientId = sh.GetPatientId(); // get a list of selected charting types var selectedLabs = from labItem in LabCheckList.Items.Cast <ListItem>() where labItem.Selected select labItem.Value; if (selectedLabs.Count() > 0) { LabCheckList2.Visible = true; if (LabCheckList2.SelectedValue.Length > 0) { selectedLabs = selectedLabs.Union (from labItem in LabCheckList2.Items.Cast <ListItem>() where labItem.Selected select labItem.Value); MainChart.BuildChart(labs, selectedLabs); // if there are exactly two labs to chart, use right Y axis for second series if (MainChart.Series.Count.Equals(2)) { MainChart.ChartAreas[0].AxisY.Enabled = AxisEnabled.True; MainChart.Series[0].YAxisType = AxisType.Primary; MainChart.Series[0].XAxisType = AxisType.Primary; MainChart.Series[0].XValueType = ChartValueType.DateTime; // MainChart.ChartAreas[0].AxisY.LineColor = MainChart.Series[0].Color; // MainChart.ChartAreas[0].AxisY.LineWidth = 2; MainChart.ChartAreas[0].AxisY.TitleForeColor = MainChart.Series[0].Color; MainChart.ChartAreas[0].AxisY2.Enabled = AxisEnabled.True; MainChart.ChartAreas[0].AxisY2.MajorGrid.Enabled = false; MainChart.Series[1].YAxisType = AxisType.Secondary; MainChart.Series[1].XAxisType = AxisType.Primary; MainChart.Series[1].XValueType = ChartValueType.DateTime; // MainChart.ChartAreas[0].AxisY2.LineColor = MainChart.Series[1].Color; // MainChart.ChartAreas[0].AxisY2.LineWidth = 2; // MainChart.ChartAreas[0].AxisY2.MajorTickMark.LineColor = MainChart.Series[1].Color; MainChart.ChartAreas[0].AxisY2.Title = MainChart.Series[1].Name; MainChart.ChartAreas[0].AxisY2.TextOrientation = TextOrientation.Rotated270; MainChart.ChartAreas[0].AxisY2.TitleForeColor = MainChart.Series[1].Color; // MainChart.ChartAreas[0].AxisY2.TitleFont = new Font(MainChart.ChartAreas[0].AxisY2.TitleFont, FontStyle.Bold); MainChart.ChartAreas[0].AxisX.Minimum = (MainChart.Series[0].Points[0].XValue < MainChart.Series[1].Points[0].XValue) ? MainChart.Series[0].Points[0].XValue : MainChart.Series[1].Points[0].XValue; } MainChart.ChartAreas[0].AxisY.Title = MainChart.Series[0].Name; MainChart.ChartAreas[0].AxisY.TextOrientation = TextOrientation.Rotated90; // MainChart.ChartAreas[0].AxisY.TitleFont = new Font(MainChart.ChartAreas[0].AxisY.TitleFont, FontStyle.Bold); } else { MainChart.BuildChart(labs, selectedLabs); } SetMinMaxDates(labs, selectedLabs); // override default width if (!String.IsNullOrEmpty(Request.QueryString["width"])) { MainChart.Width = int.Parse(Request.QueryString["width"]); } // override default height if (!String.IsNullOrEmpty(Request.QueryString["height"])) { MainChart.Height = int.Parse(Request.QueryString["height"]); } chartErrors.Visible = false; chartErrors.InnerHtml = ""; foreach (string selectedLab in selectedLabs) { if (LabHasBadPoints.Contains(selectedLab)) { chartErrors.Visible = true; chartErrors.InnerHtml += ("One or more " + selectedLab + " values could not be graphed.<br/><br/>"); } } } }