2010-07-23 71 views
2

我的图表加载数据。图表自动更新新的数据输入从一个DataGridView

我想如果新值插入到DataGridView的自动更新我的新的数据图表。

我的图表在我的DataGridView中绑定到table1table2,它从DataTable获取值。下面是代码的一小部分:

 Dim myData As New DataTable 
     wcAdapter.SelectCommand = wcCommand 
     wcAdapter.Fill(myData) 

-

 Chart1.DataSource = myData 

     Chart1.Series("Series1").ValueMemberX = "table1" 
     Chart1.Series("Series1").ValueMembersY = "table2" 

下面是完整的代码:

Try 
     wcconn.Open() 
     Dim wcCommand As New MySqlCommand() 
     ''telesales name 


     ' Dim wcQuery = "SELECT ID, Telesales, SUBSTRING(lastupdatedate, 1, 10) as 'Day', SUBSTRING(lastupdatetime FROM -9 FOR 6) as 'Time' FROM ratingout where Telesales='" & cbTelesales.Text & "' and lastupdatedate= '" & newDate & "' and lastupdatedate is not null and lastupdatetime is not null ORDER BY lastupdatetime ;" 
     ' wcCommand.Connection = wcconn 
     ' wcCommand.CommandText = wcQuery 

     Dim newDate As String 
     newDate = dateWorkCheck.Text 
     newDate = newDate.Replace("/", "-") 

     Dim y, m, d As String 
     y = newDate.Substring(6, 4) 
     m = newDate.Substring(3, 2) 
     d = newDate.Substring(0, 2) 

     newDate = y & "-" & m & "-" & d 

     Dim wcQuery = "SELECT ID, Telesales, lastupdatedate as 'Day', SUBSTRING(lastupdatetime FROM -8 FOR 2) as 'Time' FROM ratingout where Telesales='" & cbTelesales.Text & "' and lastupdatedate= '" & newDate & "' and lastupdatedate is not null and lastupdatetime is not null ORDER BY lastupdatetime ;" 
     wcCommand.Connection = wcconn 
     wcCommand.CommandText = wcQuery 


     Dim wcData As New DataTable 
     wcAdapter.SelectCommand = wcCommand 
     wcAdapter.Fill(wcData) 



     Dim i = 0 
     If wcData.Rows.Count = 0 Then 
      wcAdapter.Dispose() 
      Try 

       Dim wQuery = "SELECT ID, Telesales, lastupdatedate as 'Day', SUBSTRING(lastupdatetime FROM -8 FOR 2) as 'Time' FROM ratingout where Telesales='" & cbTelesales.Text & "' and lastupdatedate= '" & dateWorkCheck.Text & "' and lastupdatedate is not null and lastupdatetime is not null ORDER BY lastupdatetime ;" 
       wcCommand.Connection = wcconn 
       wcCommand.CommandText = wQuery 


       Dim wData As New DataTable 
       wcAdapter.SelectCommand = wcCommand 
       wcAdapter.Fill(wData) 

       wData.Columns.Add("tt") 
       wData.Columns.Add("num") 


       wcData.Columns.Add("tt") 
       wcData.Columns.Add("num") 
       'dgvWorkCheck.AutoSizeRowsMode = DataGridViewAutoSizeRowMode.AllCells 
       Dim dr As DataRow 
       For Each dr In wData.Rows 
        If lastV Is Nothing OrElse Not ColumnEqual(lastV, dr("Time")) Then 
         ''check if first value is nothing 
         If lastV = Nothing Then 
          lastV = "00" 
          l = "0" 
         Else 

          dr("tt") = lastV 
          dr("num") = l 
          'wcData.Tables("ratingout").Rows(I)("ID") = dr("ID") 
         End If 
         ListBox1.Items.Add(lastV & " <--> " & l) 
         lastV = dr("Time") 
         l = 1 
        ElseIf lastV Is Nothing OrElse ColumnEqual(lastV, dr("Time")) Then 
         l += 1 
         'Dim series1 As New Series() 
         'series1.Points.Add(l) 
        End If 


        For I = I To wData.Rows.Count 
         If I <> wData.Rows.Count Then 
          I += 1 
          If i = wData.Rows.Count Then 

           dr("tt") = lastV 
           dr("num") = l 

           ListBox1.BeginUpdate() 
           ListBox1.Items.Add(dr("Telesales") & " between[" & lastV & " and 17:00, ] <--> " & l & "[ records ]") 
           ListBox1.EndUpdate() 
          End If 

          GoTo n 
         Else 
          MsgBox("last data") 
         End If 
        Next 
n: 
       Next 
       txtRec.Text = wData.Rows.Count 

       dgvWorkCheck.DataSource = wData 

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

       ChartArea2.AxisX.LabelStyle.Angle = -90 
       ChartArea2.AxisX.LabelStyle.Interval = 1 

       ChartArea2.AxisY.LabelStyle.Angle = -90 
       ChartArea2.AxisY.LabelStyle.Interval = 5 

       ChartArea2.Name = "ChartArea2" 
       Chart2.ChartAreas.Add(ChartArea2) 
       Legend2.Name = "Legend2" 
       Chart2.Legends.Add(Legend2) 
       Chart2.Location = New System.Drawing.Point(12, 113) 
       Chart2.Name = "Chart2" 
       Series2.ChartArea = "ChartArea2" 
       Series2.Legend = "Legend2" 
       Series2.Name = "Series2" 
       Chart2.Series.Add(Series2) 
       Chart2.Size = New System.Drawing.Size(1145, 604) 
       Chart2.TabIndex = 0 
       Chart2.Text = "Chart2" 

       Chart2.Series("Series2").XValueMember = "tt" 
       Chart2.Series("Series2").YValueMembers = "num" 

       Chart2.DataSource = dgvWorkCheck.DataSource 

       Chart2.DataBind() 

      Catch ex As Exception 
       MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
      End Try 
      Exit Try 

回答

0

,因为新的数据插入到数据库中,只需要将gridview重新绑定到它的源代码就可以显示新的传入数据。

你应该隔离在一个函数数据绑定到图表的代码,并把它称为每一个新的领域被插入时间:

Function FillChartWithData() 
    Dim myData As New DataTable 
    wcAdapter.SelectCommand = wcCommand 
    wcAdapter.Fill(myData) 
    ... 
    Chart1.Series("Series1").ValueMemberX = "table1" 
    Chart1.Series("Series1").ValueMembersY = "table2" 
End Function 

编辑

我看着你的编码和看起来你缺少负责在'ratingout'表中插入新数据的部分。您应该创建一个可以让你插入新的数据,沿着线的东西:

Dim insertRating = "INSERT INTO ratingout VALUES (@NewTeleSalesName, @NewDate);" 
Dim insertCmd As New MySqlCommand(insertRating, wcconn) 
insertCmd.Parameters.Add("@NewTeleSalesName", MySqlDbType.VarChar, 255, "teleSalesName") 
insertCmd.Parameters.Add("@NewDate", MySqlDbType.Datetime, 8, New DateTime(2010, 8, 5)) 
insertCmd.ExecuteNonQuery() 
+0

它不是一个网页。它是一种vb形式。 – Gbolahan 2010-07-23 11:46:22

+0

当我更新时,我的datagridview获取新记录,但我的图表不根据数据网格中的新数据绘制图形。 我的datagridview和图表都绑定到一个datable。 – Gbolahan 2010-07-23 12:03:26

+0

记录插入后,您是否尝试重新绑定图表?您使用哪个gridview事件插入新数据? – jdecuyper 2010-07-23 12:11:22

0

为了更新我的图表bargraph命名为CashChart(这是数据绑定到一个BindingSource)我必须做到以下几点:

  1. 要清除图表信息,

  2. 清除边界源信息

  3. ,然后重新分配边界源信息:例如:

    CashChart.Series(0).Points.Clear() 
    CashChart.DataSource = ""      
    CashChart.DataSource = ESTADOINSTANTANEOBindingSource 
    

之前,只有我DataTable被更新,但这些命令后,我能得到bargraph用新值更新在桌子里。