Answered by:
how to use DataBindTable method to populate X-values to mutiple series?

Question
-
User537440814 posted
Hello friends,
I am using DataBindTable() to bind a table to a chart. There are several float type columns for Y values and a date type column for the X value of all other columns. But only the first series(i.e. series of index 0) got the right x values, the x values of other series seems to be set to the same random series that I don't know where it come from. I have also tried to assign each series mannually but got the same result. I have attached my two failed function and the result chart images below, could someone help me get out of this? Thanks!
chart image(only one series is enable in each image):
image of first series image of second series
function 1: use DataBindTable()
private void RequestSensorData1() { string ConStr = "connectio string omitted..."; string CmdStr = "command string omitted..."; DataTable ds = new DataTable(); try { myConn.Open(); myConn = new MySqlConnection(ConStr); myCmd = new MySqlCommand(CmdStr, myConn); MySqlDataAdapter dataAdapter = new MySqlDataAdapter(myCmd); dataAdapter.Fill(ds); MyChart.DataBindTable(ds.AsDataView(), "time column"); } catch { } finally { myConn.Close(); } }
function 2: set each series mannually
private void RequestSensorData() { string ConStr = "connectio string omitted..."; string CmdStr = "command string omitted..."; MySqlConnection myConn = new MySqlConnection(ConStr); try { myConn.Open(); MySqlCommand myCmd = new MySqlCommand(CmdStr, myConn); MySqlDataReader myReader = myCmd.ExecuteReader(); if (myReader.Read()) { Charts[FocusedChart].DataSource = myReader; //Charts[FocusedChart].Series.Clear(); MyChart.Series["Series1"].XValueMember = "time Column"; MyChart.Series["Series1"].YValueMembers = "Y Column1"; MyChart.Series["Series2"].XValueMember = "time Column"; MyChart.Series["Series2"].YValueMembers = "Y Column2"; MyChart.Series["Series3"].XValueMember = "time Column"; MyChart.Series["Series3"].YValueMembers = "Y Column3"; //... MyChart.DataBind(); myReader.Close(); } } catch { } finally { myConn.Close(); } }
Wednesday, August 24, 2016 8:33 AM
Answers
-
User283571144 posted
Hi Zachary.Chen,
But only the first series(i.e. series of index 0) got the right x values, the x values of other series seems to be set to the same random series that I don't know where it come from.According to your description, I had written a demo on my computer.
I find if I don't set Series.XValueType to ChartValueType.DateTime, it will show the result as image 2 shows.
So I suggest you change your codes and set Series.XValueType to each series.
More details about my test demo, you could refer to follow codes:
Chart:
<asp:Chart ID="Chart1" runat="server" Width="951px"> <Series> <asp:Series Name="Series1"></asp:Series> </Series> <Series> <asp:Series Name="Series2"></asp:Series> </Series> <ChartAreas> <asp:ChartArea Name="ChartArea1"></asp:ChartArea> </ChartAreas> <ChartAreas> <asp:ChartArea Name="ChartArea2"></asp:ChartArea> </ChartAreas> </asp:Chart>
Code-behind:
protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("weightNow", typeof(Int32)); dt.Columns.Add("weightNow2", typeof(Int32)); dt.Columns.Add("dateNow", typeof(DateTime)); DateTime departure = new DateTime(2016, 5,1); DateTime arrival = new DateTime(2016, 6, 1); DateTime arrival2 = new DateTime(2016, 7, 1); DateTime departure1 = new DateTime(2016, 4, 1); DateTime arriva1l = new DateTime(2016, 3,1); DateTime arrival22 = new DateTime(2016, 2, 1); dt.Rows.Add(30,32, departure); dt.Rows.Add(42,36, arrival); dt.Rows.Add(54,38, arrival2); dt.Rows.Add(74,31, departure1); dt.Rows.Add(24,30, arriva1l); dt.Rows.Add(64,28, arrival22); //Chart1.DataBindTable(dt.AsDataView(), "dateNow"); Chart1.Series["Series1"].ChartType = SeriesChartType.Column; //Chart1.Series["Series2"].ChartType = SeriesChartType.Column; //Chart1.Series["Series1"]["DrawingStyle"] = "Emboss"; Chart1.DataSource = dt; Chart1.Series["Series1"].YValueMembers = "weightNow"; Chart1.Series["Series1"].XValueMember = "dateNow"; Chart1.Series["Series1"].XValueType = ChartValueType.DateTime; Chart1.Series["Series2"].YValueMembers = "weightNow2"; Chart1.Series["Series2"].XValueMember = "dateNow"; Chart1.Series["Series2"].XValueType = ChartValueType.DateTime; //Chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Format = "yyyy-MM-dd"; Chart1.Series["Series2"].ChartArea = "ChartArea2"; Chart1.DataBind(); }
Best Regards,
Brando
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Thursday, August 25, 2016 2:30 PM
All replies
-
User283571144 posted
Hi Zachary.Chen,
But only the first series(i.e. series of index 0) got the right x values, the x values of other series seems to be set to the same random series that I don't know where it come from.According to your description, I had written a demo on my computer.
I find if I don't set Series.XValueType to ChartValueType.DateTime, it will show the result as image 2 shows.
So I suggest you change your codes and set Series.XValueType to each series.
More details about my test demo, you could refer to follow codes:
Chart:
<asp:Chart ID="Chart1" runat="server" Width="951px"> <Series> <asp:Series Name="Series1"></asp:Series> </Series> <Series> <asp:Series Name="Series2"></asp:Series> </Series> <ChartAreas> <asp:ChartArea Name="ChartArea1"></asp:ChartArea> </ChartAreas> <ChartAreas> <asp:ChartArea Name="ChartArea2"></asp:ChartArea> </ChartAreas> </asp:Chart>
Code-behind:
protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("weightNow", typeof(Int32)); dt.Columns.Add("weightNow2", typeof(Int32)); dt.Columns.Add("dateNow", typeof(DateTime)); DateTime departure = new DateTime(2016, 5,1); DateTime arrival = new DateTime(2016, 6, 1); DateTime arrival2 = new DateTime(2016, 7, 1); DateTime departure1 = new DateTime(2016, 4, 1); DateTime arriva1l = new DateTime(2016, 3,1); DateTime arrival22 = new DateTime(2016, 2, 1); dt.Rows.Add(30,32, departure); dt.Rows.Add(42,36, arrival); dt.Rows.Add(54,38, arrival2); dt.Rows.Add(74,31, departure1); dt.Rows.Add(24,30, arriva1l); dt.Rows.Add(64,28, arrival22); //Chart1.DataBindTable(dt.AsDataView(), "dateNow"); Chart1.Series["Series1"].ChartType = SeriesChartType.Column; //Chart1.Series["Series2"].ChartType = SeriesChartType.Column; //Chart1.Series["Series1"]["DrawingStyle"] = "Emboss"; Chart1.DataSource = dt; Chart1.Series["Series1"].YValueMembers = "weightNow"; Chart1.Series["Series1"].XValueMember = "dateNow"; Chart1.Series["Series1"].XValueType = ChartValueType.DateTime; Chart1.Series["Series2"].YValueMembers = "weightNow2"; Chart1.Series["Series2"].XValueMember = "dateNow"; Chart1.Series["Series2"].XValueType = ChartValueType.DateTime; //Chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Format = "yyyy-MM-dd"; Chart1.Series["Series2"].ChartArea = "ChartArea2"; Chart1.DataBind(); }
Best Regards,
Brando
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Thursday, August 25, 2016 2:30 PM -
User537440814 posted
Hello Brando ZWZ,
Inspired by your demo, I set XValueType for each series, then everything is fine. Thanks!
Chart1.Series["Series1"].XValueType = ChartValueType.DateTime;
Monday, August 29, 2016 2:43 AM