VB.NET/Access/Chart - создать диаграмму / гистограмму форм windows на основе данных из запроса доступа - PullRequest
0 голосов
/ 12 марта 2020

Я никогда раньше не создавал диаграммы и не понимаю, как это сделать. Я хочу создать гистограмму, которая показывает имя участника и количество побед каждого участника. Access.DBDT - это мой источник данных.

Я пытался это сделать, но получаю следующую ошибку: "Chart2.DataSource = Access.DBDT.TableName (" CompetitionDate ")"

"Необработанное исключение тип «System.InvalidCastException» произошел в Microsoft.VisualBasi c .dll Дополнительные сведения: Преобразование из строки «CompetitionDate» в тип «Integer» недопустимо. "

Вот код ...

Private Sub Charts_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Access.ExecQuery("SELECT CompetitionDate.FirstName, CompetitionDate.LastName, CompetitionDate.Wins FROM CompetitionDate ORDER BY Wins")


    Dim ChartArea2 As ChartArea = New ChartArea()
    Dim Legend2 As Legend = New Legend()
    Dim Wins2 As Series = New Series()
    Dim Chart2 = New Chart()
    Me.Controls.Add(Chart2)

    ChartArea2.Name = "ChartArea2"
    Chart1.ChartAreas.Add(ChartArea2)
    Legend2.Name = "Legend2"
    Chart2.Legends.Add(Legend2)
    Chart2.Location = New System.Drawing.Point(13, 13)
    Chart2.Name = "Chart2"
    Wins2.ChartArea = "ChartArea2"
    Wins2.Legend = "Legend2"
    Wins2.Name = "Wins"
    Chart2.Series.Add(Wins2)
    Chart2.Size = New System.Drawing.Size(800, 400)
    Chart2.TabIndex = 0
    Chart2.Text = "Total Wins"

    Chart2.Series("Wins").XValueMember = "FirstName"
    Chart2.Series("Wins").YValueMembers = "Wins"

    Chart2.DataSource = Access.DBDT.TableName("CompetitionDate")
End Sub

Ответы [ 2 ]

1 голос
/ 12 марта 2020

TableName - это строковое свойство класса DataTable . Свойством по умолчанию для класса String является свойство Chars . Эта подпись выглядит следующим образом:

Публикация по умолчанию c Чтения свойств ReadOnly (индекс как целое число) как Char

Вы пытаетесь передать "CompetitionDate" для index аргумент.

Возможно, утверждение должно быть:

Chart2.DataSource = Access.DBDT
0 голосов
/ 13 марта 2020

Спасибо за помощь. Я смог придумать решение дома прошлой ночью. Для простоты я создал другую таблицу для BJJ Wins в своей базе данных доступа и наполнил ее тестовыми данными. Затем я создал форму для выигрышей / проигрышей и добавил к ней график. Я установил его через свойства с сериями Wins и Losses. Затем использовал этот код для выполнения остальной части работы.

Private Sub BJJ_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Using cn As New OleDb.OleDbConnection _

("Provider = Microsoft.ACE.OLEDB.12.0; Источник данных = SchoolManagement.accdb")

        ds = New DataSet()


        'provider to be used when working with access database
        cn.Open()

        adapt = New OleDbDataAdapter("SELECT FLName,
                             SUM(Wins) AS Wins, SUM(Losses) AS Losses
                      FROM BJJ
                      GROUP BY FLName,Wins;", cn)

        adapt.Fill(ds)

        BJJRecord.DataSource = ds
        BJJRecord.Series("Wins").XValueMember = "FLName"
        BJJRecord.Series("Wins").YValueMembers = "Wins"
        BJJRecord.Series("Losses").YValueMembers = "Losses"
        BJJRecord.Titles.Add("Total Wins")
    End Using
End Sub

Который создал этот график.

Wins/Losses bar graph

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...