2012-01-24 3 views
1

Здравствуйте, я пытаюсь заполнить mschart из sql, но даже если серия имеет разные значения, диаграмма такая же. Таким образом, все серии имеют одну и ту же линию, перекрывающую друг друга.Mschart получить несколько серий из базы данных

 sqlConnection.Open(); 
     SqlCommand cmd = new SqlCommand(query, sqlConnection); 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandTimeout = 300; 
     rdr = cmd.ExecuteReader(); 
     DataTable table = new DataTable(); 

     // Add three columns to the table. 
     table.Columns.Add("Channel", typeof(String)); 
     table.Columns.Add("Date", typeof(String)); 
     table.Columns.Add("Value", typeof(Int32)); 


     // Add data rows to the table. 
     while (rdr.Read()) 
     { 

      table.Rows.Add(new object[] { rdr[0], rdr[1], rdr[2] }); 

     } 
     chart1.DataSource = table; 
     //add series 
     for (int i = 0; i < table.Rows.Count; i++) 
     { 
      if (chart1.Series.Where(x => x.Name == table.Rows[i][0].ToString()).Count() > 0) 
      { 

      } 
      else 
      { 
       chart1.Series.Add(table.Rows[i][0].ToString()); 

      } 
     } 
     //set x,y axis for each series 
     for (int i = 0; i < chart1.Series.Count; i++) 
     { 

      chart1.Series[i].XValueMember = "Date"; 
      chart1.Series[i].YValueMembers = "Value"; 

      chart1.Series[i].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; 

     } 
     chart1.DataBind(); 
+0

Ну все имеют одинаковые элементы данных DataSource и X и Y, показывают, что все они будут отображаться то же самое! ! – V4Vendetta

+0

ОК я понял спасибо –

ответ

3

нашел другой способ без привязки данных

#region get values from database 
     string query = "declare @start datetime, @end datetime select @start = '" + start + "', @end = '" + end + "' select Name,DataDT,Rating,DataGroupID from DATA inner join Channels on Channels.ID = DATA.ChannelID where DataDT >= @start and DataDT < @end and ChannelID<'4'"; 
     SqlDataReader rdr = null; 
     sqlCon = new SqlConnection(Properties.Settings.Default.ConectionString); 
     sqlConnection.Open(); 
     SqlCommand cmd = new SqlCommand(query, sqlConnection); 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandTimeout = 300; 
     rdr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); 
     DataTable table = new DataTable(); 
     // Add three columns to the table. 
     table.Columns.Add("Channel", typeof(String)); 
     table.Columns.Add("Date", typeof(String)); 
     table.Columns.Add("Value", typeof(Int32)); 

     // Add data rows to the table. 
     while (rdr.Read()) 
     { 
      table.Rows.Add(new object[] { rdr[0], rdr[1], rdr[2] }); 
     } 
     sqlCon.Close(); 


     #endregion 



     // Create a data series 


     for (int i = 0; i < table.Rows.Count; i++) 
     { 
      if (chart1.Series.Where(x => x.Name == table.Rows[i][0].ToString()).Count() > 0) 
      { 

      } 
      else 
      { 
       Series series = new Series(table.Rows[i][0].ToString()); 
       chart1.Series.Add(series); 

      } 
     } 
     for (int i = 0; i < table.Rows.Count; i++) 
     { 
      foreach (Series series in chart1.Series) 
      { 
       if (table.Rows[i][0].ToString() == series.Name) 
       { 
        series.Points.AddXY(Convert.ToDateTime(table.Rows[i][1]).ToShortTimeString(),Convert.ToDouble(table.Rows[i][2])); 
       } 

      } 
     } 
     //Set Properties for chart series 
     for (int i = 0; i < chart1.Series.Count; i++) 
     { 

      chart1.Series[i].XValueMember = "Date"; 
      chart1.Series[i].YValueMembers = "Value"; 

      chart1.Series[i].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; 
      chart1.Series[i].XValueType = ChartValueType.Time; 
      chart1.Series[i].ChartType = SeriesChartType.Line; 

      chart1.Series[i].MarkerStyle = MarkerStyle.Star10; 
      chart1.Series[i].MarkerSize = 8; 
      chart1.Series[i].MarkerColor = chart1.Series[0].BorderColor; 
      chart1.Series[i].BorderWidth = 3; 
      chart1.Series[i].IsValueShownAsLabel = true; 
      chart1.Series[i].ToolTip = "#VALY => #AXISLABEL"; 
     } 

     chart1.ChartAreas[0].AxisX.IsMarginVisible = true; 
    } 
2

попробовать ниже код

DataTable table = new DataTable(); 

sqlConnection.Open(); 
SqlCommand cmd = new SqlCommand(query, sqlConnection); 
cmd.CommandType = CommandType.Text; 
cmd.CommandTimeout = 300; 
rdr = cmd.ExecuteReader(); 
table.Load(rdr);   

Chart1.DataBindCrossTable(table.AsEnumerable(), "Channel", "Date", "Value", ""); 

for (int i = 0; i < Chart1.Series.Count; i++) 
{ 
    LegendItem legendItem = new LegendItem(); 
    legendItem.Name = Chart1.Series[i].Name; 
    legendItem.BorderWidth = 1; 
    legendItem.ShadowOffset = 1; 
    legendItem.Color = Color.FromName(Chart1.Series[i].Color.Name.ToString()); 

    Chart1.Series[i].ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Column; 
    Chart1.Series[i].BorderWidth = 3; 
    Chart1.Series[i].ToolTip = "#VALY/#VALY2 => #AXISLABEL"; 
    Chart1.Series[i].IsValueShownAsLabel = true; 
    Chart1.Series[i].IsVisibleInLegend = true; 
} 

Примечание: его рекомендуется не увеличивать время ожидания по умолчанию другой, то ваш тест системы из-за проблем с производительностью

Смежные вопросы