数据源有0行时图表上的日期错误

时间:2013-05-28 09:01:23

标签: vb.net winforms charts dataset

我有一个图表,显示从sql表中选择的一些数据。在x轴上显示日期。 我怎么会发现一个有点讨厌的bug。 该程序有一个客户列表,如果我点击一个客户,我会得到一些客户的数据。如果我点击的第一个客户没有任何行,则x轴上的日期会变得混乱(例如,41394,5而不是2013-05-05)。 如果我重新启动程序并选择有行的客户,那么它可以完美运行,然后我可以选择没有数据的客户,然后再次选择具有数据的客户,该日期是正确的。

编辑:更清楚;如果我首先选择一个0行的客户,那么即使我后来选择了一个> 0行的客户,它也会搞乱。但是,如果我首先选择> 0行的客户,我可以稍后选择0行的客户,获得一个空白图表,如果我然后切换到有行的客户,我会得到正常的日期。

创建数据集的代码如下所示:

'Test function for diagram results, returns DATASET
Public Function GetDiagramData(ByVal OrgNr As String) As DataSet
    Dim Con As SqlCeConnection = DbConn()
    Con.Open()
    Dim Com As New SqlCeCommand("SELECT Value1, Value2, Value3, Created AS Date FROM Information WHERE OrgNr = @orgnr ORDER BY Created DESC", Con)
    Com.Parameters.AddWithValue("@orgnr", OrgNr)

    Dim da As New SqlCeDataAdapter(Com)
    Dim ds As New DataSet

    da.Fill(ds, "Diagrams")

    Con.Close()
    Com = Nothing

    Return ds
End Function

这是填充图表的代码:

Private Sub LoadDataForDiagrams()
    'TESTING
    Form1.Chart1.Series("Value1").YValueMembers = "Value1"
    Form1.Chart1.Series("Value1").XValueMember = "Date"
    Form1.Chart1.Series("Value1").BorderWidth = 4

    Form1.Chart1.Series("Value2").YValueMembers = "Value2"
    Form1.Chart1.Series("Value2").XValueMember = "Date"
    Form1.Chart1.Series("Value2").BorderWidth = 4

    Form1.Chart1.Series("Value3").YValueMembers = "Value3"
    Form1.Chart1.Series("Value3").XValueMember = "Date"
    Form1.Chart1.Series("Value3").BorderWidth = 3

    Dim SQL As New SQLCompact
    Dim Binding As DataSet = SQL.GetDiagramData(Form1.LBL_Client_ORG.Text)
    Form1.Chart1.DataSource = Binding.Tables("Diagrams")
    SQL = Nothing

End Sub

1 个答案:

答案 0 :(得分:0)

Amagerd。在系列设置中玩游戏后,我发现系列中每个成员的值为“XValueType”。它默认为“自动”,当我将其更改为日期时,它的工作非常完美。这就是(非常简单)的灵魂。在这里以图形方式设置它们或将这些行添加到上面的代码中(代码的第2部分):

Form1.Chart1.Series("Value1").YValueMembers = "Value1"
Form1.Chart1.Series("Value1").XValueMember = "Date"
Form1.Chart1.Series("Value1").BorderWidth = 4
Form1.Chart1.Series("Value1").XValueType = vbDate

Form1.Chart1.Series("Value2").YValueMembers = "Value2"
Form1.Chart1.Series("Value2").XValueMember = "Date"
Form1.Chart1.Series("Value2").BorderWidth = 4
Form1.Chart1.Series("Value2").XValueType = vbDate

Form1.Chart1.Series("Value3").YValueMembers = "Value3"
Form1.Chart1.Series("Value3").XValueMember = "Date"
Form1.Chart1.Series("Value3").BorderWidth = 3
Form1.Chart1.Series("Value3").XValueType = vbDate