Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: ADODB.RecordSet & MSChart Добавлено: 12.11.02 09:41  

Автор вопроса:  Sergey
Народ, помогите идиоту. Уже 3 дня бьюсь над простой, казалось бы, задачей: мне нужно построить график на
  основании РекордСэта, состоящего всего из двух полей. 1-е: тип дата, 2-е: тип целое. График должен быть примерно
  следующий: по оси У идут значения (2-е поле), а по Х - даты (1-е поле). Тут все прозрачно. Но есть два
  требования: во-первых, максимум и минимум графика по оси У должен приходится на максимум и минимум 2-го поля. Это
   я кое-как сделал, т.к. диаграмма по умолчанию строится по оси У начиная с нуля, а у меня самое маленькое число
  200000 и получается, что график весь вверху сосредоточен. А вот вторую задачу победить не смог: мне надо, чтобы
  на самой кривой в каждой ее точке отображалось соответствующее ее значение, ну как в Экселе. Может кто
  сталкивался с этим делом? Был бы признателен за любую информацию: ссылки, советы, предположения, примеры...

  Ниже привожу исходный код на VB:

  Dim Cnn as New ADODB.Connection

  Dim Rst as New ADODB.Recordset

  Dim lMax as Long, lMin as Long, j as Integer, sSQL as String

  sSQL = "SELECT [T].[F1], [T].[F2] FROM [T] WHERE [T].[F1] BETWEEN DATE1 AND DATE2"

  Set Rst = Cnn.Execute(sSQL, , adCmdText)

  With Chart

     .RowCount = Rst.RecordCount

     lMax = Rst.Field(1).Value

     lMin = Rst.Field(1).Value

     For j = 1 to Rst.RecordCount

        .Row = j

        If Rst.Field(1).Value > lMax Then lMax = Rst.Field(1).Value

        If Rst.Field(1).Value < lMin Then lMin = Rst.Field(1).Value

        .Data = Rst.Field(1).Value

        .RowLabel = Rst.Field(0).Value

        Rst.MoveNext

     Next j

     .Plot.Axis(VtChAxisIdY).ValueScale.Maximum = lMax

     .Plot.Axis(VtChAxisIdY).ValueScale.Minimum = lMin

  End With

  Rst.Close

  Set Rst = Nothing


Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Evgeny D



Вопросов: 10
Ответов: 33
 Профиль | | #1 Добавлено: 12.11.02 13:38

Иди по следующей тропинке:

Properties - Custom - Axis - Выбери Y-Axis и сними галочку Automating Scaling

Ответить

Номер ответа: 2
Автор ответа:
 Sergey



Вопросов: 14
Ответов: 8
 Профиль | | #2 Добавлено: 12.11.02 13:58

Это не совсем корректно, на мой взгляд, т.к. диаграмма у меня постоянно перестраивается. Следующий код, по-моему, лучше:

With .Plot.Axis(VtChAxisIdY)
                                    .ValueScale.Maximum = lMax
                                    .ValueScale.Minimum = lMin
End With

А вот как сделать подписи? Допустим, у меня столбиковая диаграмма. Как наверху каждого столбика подписать его значение, как это Эксель делает? Это вообще возможно? Или может через OLE экселевскую диаграмму внедрить? Но тормозно будет, да и не умею я толком с этим делом работать.

Ответить

Номер ответа: 3
Автор ответа:
 Evgeny D



Вопросов: 10
Ответов: 33
 Профиль | | #3 Добавлено: 12.11.02 14:17

1. Галочку надо было снять, чтобы у тебя програмно работали .ValueScale.Maximum и .ValueScale.Minimum. А как ты будешь их менять - это вопрос другой http://vbnet.ru/forum/images/102.gif

2. Вряд-ли ты в стандартном контроле найдешь какие-то навороченные фичи.

Попробуй поискать в и-нете бесплатные chart-ы. Они есть. А если и платные, до "пеницилин" для них поискать можно. Посмотри на http://www.componentone.com . У них много интересных контролов есть.

Ответить

Номер ответа: 4
Автор ответа:
 Sergey



Вопросов: 14
Ответов: 8
 Профиль | | #4 Добавлено: 13.11.02 08:46

И все-таки в стандартном контроле это есть. Приведенный ниже код подписывает все графики. Нарыл я это дело, причем в MSDN. Вот единственное, что так до сих пор и не понял, так это почему в свойстве DataPoints вместо индекса точки на графике, а именно он там должен находится по описанию используется -1. Может кто просветит?

For j = 1 To .Plot.SeriesCollection.Count
   With .Plot.SeriesCollection(j).DataPoints(-1).DataPointLabel
         .LocationType = VtChLabelLocationTypeAbovePoint
         .Component = VtChLabelComponentValue
         .VtFont.Size = 8
   End With
Next j

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам