VB.NET/Access/Chart - създаване на windows forms диаграма/лентова графика въз основа на данни от заявка за достъп

Никога преди не съм създавал диаграма и не разбирам как да го направя. Искам да създам лентова графика, която показва името на състезателя и колко победи има всеки състезател. Access.DBDT е моят източник на данни.

Опитах това, но получавам следната грешка на "Chart2.DataSource = Access.DBDT.TableName("CompetitionDate")"

„В Microsoft.VisualBasic.dll възникна необработено изключение от тип „System.InvalidCastException“ Допълнителна информация: Преобразуването от низ „CompetitionDate“ към тип „Цяло число“ не е валидно.“

Ето кода...

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

person Chet Horton    schedule 12.03.2020    source източник


Отговори (2)


TableName е свойство на низ в DataTable Клас. Свойството по подразбиране на класа String е Свойство Chars. Този подпис е както следва:

Обществени свойства само за четене по подразбиране Chars(index As Integer) As Char

Опитвате се да подадете „CompetitionDate“ за аргумента index.

Вероятно изявлението трябва да бъде:

Chart2.DataSource = Access.DBDT
person TnTinMn    schedule 12.03.2020
comment
Опитах това и ме приближи, но данните в диаграмата бяха грешни. - person Chet Horton; 12.03.2020

Благодаря за помощта. Снощи успях да намеря решение у дома. За простота създадох друга таблица за BJJ Wins в моята база данни за достъп и я попълних с тестови данни. След това създадох формуляр за печалби/загуби и добавих диаграма към него. Настроих го чрез свойства със серии победи и серии загуби. След това използвайте този код, за да свършите останалата част от работата.

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

("Доставчик=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

Което създаде тази графика.

Стълбовидна графика на победи/загуби

person Chet Horton    schedule 13.03.2020