Anzeige im DataGrid bei zweitem Ablauf

29/04/2010 - 11:27 von Johann | Report spam
Hallo

Problem
Im zweiten Ablauf werden Daten im DataGrid nicht geàndert.



Sub FillDataSet(parSaison)

Dim myCmd As New OleDbCommand
myCmd.CommandText= SELECT … WHERE Saison= parSaison

Dim ta As OleDbDataAdapter = New OleDbDataAdapter(MyCmd)
ta.Fill(myDataSet, "Fakten")
myDataGrid.DataSource = myDataSet.Tables("Fakten")

End Sub


bis da alles OK.
MyDataGrid zeigt Daten der Saison1

Bei Änderung der Saison auf z.B. Saison2 wird die FillDataSet(Saison2) noch
mal aufgerufen.

myDataSet.Tables("Fakten") beinhaltet die neue Daten.
myDataGrid zeigt aber die Daten der Saison1

Danke
Johann
 

Lesen sie die antworten

#1 Peter Götz
29/04/2010 - 12:57 | Warnen spam
Hallo Johann,

Problem
Im zweiten Ablauf werden Daten im DataGrid
nicht geàndert.

Sub FillDataSet(parSaison)

Dim myCmd As New OleDbCommand
myCmd.CommandText= SELECT . WHERE Saison= parSaison

Dim ta As OleDbDataAdapter = New OleDbDataAdapter(MyCmd)



Sollte eigentlich auch ohne gehen, aber setze hier
mal noch die Zeile

myDataSet,"Fakten".Clear

ein um die DataTable von evtl. noch vorhandenem bisherigen
Inhalt zu befreien.

ta.Fill(myDataSet, "Fakten")
myDataGrid.DataSource = myDataSet.Tables("Fakten")

End Sub


bis da alles OK.
MyDataGrid zeigt Daten der Saison1

Bei Änderung der Saison auf z.B. Saison2 wird die
FillDataSet(Saison2) noch mal aufgerufen.



Sub FillDataSet() wird erneut aufgerufen, nur diesmal
mit einem anderen Argument Saison2?

myDataSet.Tables("Fakten") beinhaltet die neue Daten.
myDataGrid zeigt aber die Daten der Saison1



Kann ich hier so nicht nachvollziehen.
ta.FillLoadOption hast Du in Deinem Originalcode nicht gesetzt?


Bei einer Neuzuweisung von myDataGrid.DataSource
kann ich Dein Problem so nicht nachvollziehen:


' /// Code in einem leeren Formmodul (Form1.vb)
Public Class Form1
Private mDT1 As DataTable
Private mDV1 As DataView
Private mDT2 As DataTable
Private mDV2 As DataView
Private WithEvents mTimer As Windows.Forms.Timer
Private WithEvents DGrid As DataGrid


Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

DGrid = New DataGrid
DGrid.Dock = DockStyle.Fill

Me.Controls.Add(DGrid)

CreateData()

mTimer_Tick(Nothing, New System.EventArgs)
mTimer = New Windows.Forms.Timer
mTimer.Interval = 2000
mTimer.Start()
End Sub

Private Sub Form1_FormClosing _
(ByVal sender As Object, _
ByVal e As FormClosingEventArgs _
) Handles Me.FormClosing

If mTimer IsNot Nothing Then
mTimer.Stop()
End If
End Sub


Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow
mDT1 = New DataTable
With mDT1
.Columns.Add("ID", GetType(Integer))
.Columns(0).Unique = True
.Columns.Add("Mon", GetType(String))
.Columns.Add("Monat", GetType(String))

For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, True)
DR.Item(2) = MonthName(i, False)
.Rows.Add(DR)
Next
.AcceptChanges()
End With
mDV1 = New DataView(mDT1)


mDT2 = New DataTable
With mDT2
.Columns.Add("ID", GetType(Integer))
.Columns(0).Unique = True
.Columns.Add("Tg", GetType(String))
.Columns.Add("Tag", GetType(String))

For i = 1 To 7
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = WeekdayName(i, True)
DR.Item(2) = WeekdayName(i, False)
.Rows.Add(DR)
Next
.AcceptChanges()
End With
mDV2 = New DataView(mDT2)
End Sub


Private Sub mTimer_Tick _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mTimer.Tick

If DGrid.DataSource Is mDV2 Then
DGrid.DataSource = mDV1
Else
DGrid.DataSource = mDV2
End If
End Sub
End Class
' \\\ E N T E

Verwendest Du tatsàchlich das DataGrid oder evtl. doch
das neuere DataGridView?
Beide verhalten sich beim neuen Setzen von .DataSource
aber völlig gleich und somit spielt es für Dein Problem
keine Rolle ob DataGrid oder DataGridView.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen