Springen naar inhoud


WPF Solved

Lijst Met Items Een Voor Een Verwijderen.



  • Log in a.u.b. om te beantwoorden
Er zijn 4 reacties in dit onderwerp

#1 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 349 berichten
    Laatst bezocht 21 sep 2017 14:37

Geplaatst op 02 maart 2016 - 23:38

Hallo,

Ik heb een Datagrid met een aantal items erin. Eigenlijk is elk item een opdracht die uit gevoerd moet worden.
Als een item is uitgevoerd dan moet het item uit de datagrid worden verwijderd worden, tot dat het datagrid helemaal leeg is.
Het datagrid wat ik heb wordt alleen leeggemaakt bij het einde van het programma, tussen door wordt de datagrid niet gefreshed.

Ludi.

#2 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 349 berichten
    Laatst bezocht 21 sep 2017 14:37

Geplaatst op 03 maart 2016 - 13:30

Visual Basic Code:
Class MainWindow
Dim disp As DispatcherTimer = New DispatcherTimer()

Public bStarted As Boolean
Private backgroundWorker As BackgroundWorker
Private dtUpdate As New DataTable
Private drUpdate As DataRow

Dim sQryDefault As String
Private mds As DataSet

Property ds As DataSet
Get
If mds Is Nothing Then
mds = New DataSet
End If
Return mds
End Get
Set(value As DataSet)
mds = value
End Set
End Property

Public Sub New()
InitializeComponent()
End Sub

Private Sub DoWork()

dtUpdate.Columns.Add("UpdNo", Type.GetType("System.Int16"))
dtUpdate.Columns.Add("UpdName", Type.GetType("System.String"))
dtUpdate.Columns.Add("UpdNr", Type.GetType("System.Int16"))

dtUpdate.Columns.Add("KindAction", Type.GetType("System.Int16"))
dtUpdate.Columns.Add("TabelName", Type.GetType("System.String"))
dtUpdate.Columns.Add("ProcedureName", Type.GetType("System.String"))

dtUpdate.Columns.Add("Status", Type.GetType("System.Boolean"))
dtUpdate.Columns("Status").DefaultValue = False

dtUpdate.Rows.Add(1, "Update 1", 100, 1, "AA", "")
dtUpdate.Rows.Add(1, "Update 1", 101, 1, "AB", "")
dtUpdate.Rows.Add(1, "Update 1", 102, 1, "AC", "")
dtUpdate.Rows.Add(1, "Update 1", 103, 1, "AD", "")
dtUpdate.Rows.Add(1, "Update 1", 104, 1, "AE", "")
dtUpdate.Rows.Add(1, "Update 1", 105, 1, "AF", "")

ds.Tables.Add(dtUpdate)
End Sub

Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded

backgroundWorker = New BackgroundWorker
backgroundWorker.WorkerReportsProgress = True
backgroundWorker.WorkerSupportsCancellation = False

AddHandler backgroundWorker.DoWork, AddressOf DoWork
AddHandler backgroundWorker.RunWorkerCompleted, AddressOf RunWorkerCompleted

backgroundWorker.RunWorkerAsync()

End Sub

Private Sub RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
DG.ItemsSource = ds.Tables(0).DefaultView
DG.UpdateLayout()

AddHandler disp.Tick, AddressOf dispatcherTimer_Tick

disp.Interval = New TimeSpan(0, 0, 1)
disp.Start()

End Sub

Public Sub dispatcherTimer_Tick()

If dtUpdate.Rows.Count > 0 Then
For i = dtUpdate.Rows.Count - 1 To 0 Step -1
drUpdate = dtUpdate.Rows(i)
'drUpdate.Delete()

SetRow(drUpdate.Item("UpdNr"), "UpdNr")

'For j = 0 To 100000000
'Next

Next
End If
disp.Stop()

End Sub

Public Sub SetRow(obj As Object, sMember As String)
Dim drv As DataRowView
Dim dr As DataRow
Dim dt As New DataTable
Dim dc As DataGridColumn

Dim colName As String
Dim colId As Integer
Dim db As Object

If DG.Columns.Count > 0 Then
For i = 0 To DG.Columns.Count - 1
dc = DG.Columns(i)
db = dc
colName = db.SortMemberPath
If UCase(colName) = UCase(sMember) Then
colId = i
Exit For
End If
Next
End If

If DG.Items.Count > 0 Then
For i = 0 To DG.Items.Count - 1
drv = DG.Items(i)
dr = drv.Row

If dr.Item(colId) = obj Then
DG.UpdateLayout()
DG.SelectedItem = drv
DG.ScrollIntoView(i)
Exit For
End If
Next
End If

End Sub

End Class


Wat zou deze code moeten doen. Heel snel de datagrid moeten vullen daarna een autoscroll door de datagrid heen.
Maar dat doet hij niet.

#3 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1055 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 05 maart 2016 - 12:25

Bericht bekijkenLudi, op 03 maart 2016 - 13:30, zei:

Wat zou deze code moeten doen. Heel snel de datagrid moeten vullen daarna een autoscroll door de datagrid heen.
Maar dat doet hij niet.

Met delete (waar je code overigens op steunt, zie de count) is dat toch eenvoudigweg,van achter naar voor:
Visual Basic Code:
  Private Sub RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
		'DG.CanUserAddRows = False
		DG.ItemsSource = Ds.Tables(0).DefaultView

		DG.UpdateLayout()
		DG.SelectedIndex = DG.Items.Count - 1 - If(DG.CanUserAddRows, 1, 0)
		DG.ScrollIntoView(DG.SelectedItem)

		AddHandler disp.Tick, AddressOf dispatcherTimer_Tick

		disp.Interval = New TimeSpan(0, 0, 1)
		disp.Start()

	End Sub

	Public Sub dispatcherTimer_Tick(sender As Object, e As EventArgs)
		If dtUpdate.Rows.Count > 0 Then
			dtUpdate.Rows(dtUpdate.Rows.Count - 1).Delete()
			DG.SelectedIndex = DG.Items.Count - 1 - If(DG.CanUserAddRows, 1, 0)
		Else
			disp.Stop()
		End If
	End Sub
 



#4 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 349 berichten
    Laatst bezocht 21 sep 2017 14:37

Geplaatst op 06 maart 2016 - 13:15

Dit precies wat ik zoek.

Dank je je maakt mijn zondag geweldig.

#5 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 349 berichten
    Laatst bezocht 21 sep 2017 14:37

Geplaatst op 10 maart 2016 - 18:01

Dit onderwerp mag worden afgesloten.





Ook met taq WPF Solved voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[WPF Solved] Untitled 1

Met dank aan J├╝rgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)