Страница: 1 |
Вопрос: ADODB.RecordSet & MSChart | Добавлено: 12.11.02 09:41 |
Автор вопроса: ![]() |
Народ, помогите идиоту. Уже 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 10 Ответов: 33 |
Профиль | Цитата | #1 | Добавлено: 12.11.02 13:38 |
Иди по следующей тропинке: Properties - Custom - Axis - Выбери Y-Axis и сними галочку Automating Scaling |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 14 Ответов: 8 |
Профиль | Цитата | #2 | Добавлено: 12.11.02 13:58 |
Это не совсем корректно, на мой взгляд, т.к. диаграмма у меня постоянно перестраивается. Следующий код, по-моему, лучше: With .Plot.Axis(VtChAxisIdY) А вот как сделать подписи? Допустим, у меня столбиковая диаграмма. Как наверху каждого столбика подписать его значение, как это Эксель делает? Это вообще возможно? Или может через OLE экселевскую диаграмму внедрить? Но тормозно будет, да и не умею я толком с этим делом работать. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 14 Ответов: 8 |
Профиль | Цитата | #4 | Добавлено: 13.11.02 08:46 |
И все-таки в стандартном контроле это есть. Приведенный ниже код подписывает все графики. Нарыл я это дело, причем в MSDN. Вот единственное, что так до сих пор и не понял, так это почему в свойстве DataPoints вместо индекса точки на графике, а именно он там должен находится по описанию используется -1. Может кто просветит? For j = 1 To .Plot.SeriesCollection.Count |
Страница: 1 |
|