Hallo ich habe eine Datatabel mit einem Dataview an ein Datagridview gebunden. Jetzt sind in der Datagridview nur 20 Zeilen über ein Rowfilter sichtbar.
Die änderunden in der Datatabel werden in einer anderen klasse mit einem Backroundworker geändert. Hier kann es sein das 2 bis 3 rows im millisekunden takt geändert werden(ich kann nicht genau sagen wie schnell).
Wenn ich das listchangehandle deaktiviere werden die werte in realtime geändert und im DGV angezeigt. Sobald ich aber das Handle für das Listchange einschalte kommt es zu immensen zeitverzögerungen. Was mache ich falsch.
Hier der Code der die Zeilen mit den einträgen ändert.
Hier der Code der die farben ändert.
Die änderunden in der Datatabel werden in einer anderen klasse mit einem Backroundworker geändert. Hier kann es sein das 2 bis 3 rows im millisekunden takt geändert werden(ich kann nicht genau sagen wie schnell).
Wenn ich das listchangehandle deaktiviere werden die werte in realtime geändert und im DGV angezeigt. Sobald ich aber das Handle für das Listchange einschalte kommt es zu immensen zeitverzögerungen. Was mache ich falsch.
Hier der Code der die Zeilen mit den einträgen ändert.
VB.NET-Quellcode
- Private Sub ChangeOffersTable(ByVal rowData As O2GRow)
- Dim foundrow() As DataRow = Changingtable.Select(Changingtable.Columns(0).ColumnName & " = '" & rowData.getCell(0).ToString & "'")
- Dim column As O2GTableColumnCollection = rowData.Columns
- Dim i1 As Integer = 0
- Dim Changevalue As Boolean = False
- For Each SelectedRow As DataRow In foundrow
- SelectedRow.BeginEdit()
- If CDbl(SelectedRow(3)) <> CDbl(rowData.getCell(3)) Then
- SelectedRow(3) = CDbl(rowData.getCell(3))
- SelectedRow(28) = CDbl(rowData.getCell(28))
- Changevalue = True
- End If
- If CDbl(SelectedRow(4)) <> CDbl(rowData.getCell(4)) Then
- SelectedRow(4) = CDbl(rowData.getCell(4))
- SelectedRow(29) = CDbl(rowData.getCell(29))
- Changevalue = True
- End If
- SelectedRow(5) = CDbl(rowData.getCell(5))
- SelectedRow(6) = CDbl(rowData.getCell(6))
- SelectedRow(7) = CDbl(rowData.getCell(7))
- SelectedRow(11) = CDbl(rowData.getCell(11))
- SelectedRow(12) = CDbl(rowData.getCell(12))
- SelectedRow(27) = CDbl(rowData.getCell(27))
- SelectedRow.EndEdit()
- Exit For
- Next
- 'Hier wird eine andere Klasse angesprochen hier werden auch noch änderungen evtl. gemacht
- If Not Point_Settings Is Nothing And Changevalue = True Then
- If CInt(rowData.getCell(0)) <= 13 And FXCM_Connector_Int.DownloadHistoricalData = False And FXCM_Connector_Int.UpdateHistory = False Then
- MyMethod2 = New mymethod(AddressOf Point_Settings.ChangingOffer)
- MyMethod2.Invoke(rowData.getCell(1).ToString, rowData.getCell(4).ToString, rowData.getCell(3).ToString)
- End If
- End If
- End Sub
Hier der Code der die farben ändert.
VB.NET-Quellcode
- Option Strict On
- Imports fxcore2
- Imports System.Threading
- Public Class RealTime_Kurse_Form
- Public WithEvents OffersDataView As New DataView
- Delegate Sub mymethod(ByVal Rownindex As Integer)
- Dim ChangeBoolean As Boolean = False
- Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Me.DataGridView2.Columns.Clear()
- Me.MdiParent = TZAutoTradingTool
- Me.Location = New Point(-1, 170)
- End Sub
- Private Sub Form2_LocationChanged(sender As Object, e As EventArgs) Handles Me.LocationChanged
- Me.Location = New Point(-1, 170)
- End Sub
- Public Sub AddBinding()
- Try
- OffersDataView = TZAutoTradingTool.OffersTable.DefaultView
- Me.DataGridView2.DataSource = OffersDataView
- Catch ex As Exception
- End Try
- End Sub
- Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
- ChangeBoolean = True
- If CheckBox1.Checked Then
- OffersDataView.RowFilter = "SubscriptionStatus = 'T'"
- Else
- OffersDataView.RowFilter = ""
- End If
- ChangeBoolean = False
- End Sub
- Private Sub ListChange(ByVal sender As Object, ByVal args As System.ComponentModel.ListChangedEventArgs) Handles OffersDataView.ListChanged
- Dim MyMethod2 As New mymethod(AddressOf changedatagrid)
- Invoke(MyMethod2, args.NewIndex)
- End Sub
- Private Sub changedatagrid(ByVal Rownindex As Integer)
- If ChangeBoolean = False Then
- Dim Selectedrow As DataGridViewRow = Me.DataGridView2.Rows(Rownindex)
- Select Case CInt(Selectedrow.Cells("BidChangeDirection").Value)
- Case -1
- Selectedrow.Cells("BID").Style.ForeColor = Color.Red
- Case 1
- Selectedrow.Cells("BID").Style.ForeColor = Color.Green
- End Select
- Select Case CInt(Selectedrow.Cells("AskChangeDirection").Value)
- Case -1
- Selectedrow.Cells("ASK").Style.ForeColor = Color.Red
- Case 1
- Selectedrow.Cells("ASK").Style.ForeColor = Color.Green
- End Select
- Select Case CInt(Selectedrow.Cells("LowChangeDirection").Value)
- Case -1
- Selectedrow.Cells("Low").Style.ForeColor = Color.Red
- Case 1
- Selectedrow.Cells("Low").Style.ForeColor = Color.Green
- End Select
- Select Case CInt(Selectedrow.Cells("HiChangeDirection").Value)
- Case -1
- Selectedrow.Cells("High").Style.ForeColor = Color.Red
- Case 1
- Selectedrow.Cells("High").Style.ForeColor = Color.Green
- End Select
- End If
- End Sub
- End Class