2012-02-08 5 views
0

Я работаю с элементом управления диаграммой ASP.NET, и я использую следующий код для данных привязки данных к элементу управления диаграммой. На диаграмме представлены три серии: Series1, Series2 и Series3. Проблема, которую я испытываю с приведенным ниже кодом, заключается в том, что она только привязывается к первой серии, так что, когда отображается график, отображается только первая серия (Series1), остальные две не отображаются. Если я пройду через его код, все будет в порядке.Управление диаграммами и привязкой ASP.NET к нескольким сериям

Есть ли у кого-нибудь предложения по решению этой проблемы?

private void ChartData1() 
    { 
     using (SqlConnection conn = new SqlConnection()) 
     { 
      conn.ConnectionString = ConfigurationManager.ConnectionStrings["someConnectionString"].ConnectionString; 

      SqlCommand cmd = null; 
      cmd = new SqlCommand("dbo.ChartData", conn); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.Add("@Codevalue", SqlDbType.VarChar, 12); 
      cmd.Parameters.Add("@filter", SqlDbType.VarChar, 50); 

      cmd.Parameters["@Codevalue"].Value = "JAM"; 
      cmd.Parameters["@filter"].Value = "three_letter_code"; 

      conn.Open(); 
      SqlDataReader chartReader = cmd.ExecuteReader(); 

      //Bind the data using the DataBindTable method 
      this.Chart1.Series["Series1"].Points.DataBindXY(chartReader, "bucketdate", chartReader, "RecordCount"); 
      this.Chart1.Series["Series2"].Points.DataBindXY(chartReader, "bucketdate", chartReader, "AverageTurns"); 
      this.Chart1.Series["Series3"].Points.DataBindXY(chartReader, "bucketdate", chartReader, "MovingAverageTurns"); 

      chartReader.Close(); 
      conn.Close(); 
     } 

    } 

ответ

1

Читатель только вперед, ваш код в его нынешнем виде должен будет проходить через считывателя три раза.

Существует несколько вариантов, но если вы хотите использовать DataBindXY, вам нужно будет извлечь данные из считывателя в коллекцию (например, используя LINQ) и привязать ее к этой коллекции.

Альтернативой может быть установка свойств XValueMember и YValueMembers в каждой серии, а затем вызов DataBind, который затем будет связывать все три серии на одной итерации через считыватель.

+0

Спасибо, Джо, я попробую. Кроме того, я получил это, чтобы работать. Я трижды повторял читателя. Я, конечно же, должен пересмотреть это, чтобы сделать его немного более элегантным/эффективным. –

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