| 

.NET C# Java Javascript Exception

2
Hallo

ich bin noch nicht so der Experte in WPF.
Ich habe ein Datagrid, welches ich befülle. Beim erneuten Befüllen sind die Zeilen leer. Es zeigt mir zwar Zeilen an, aber eben nur leer.
Auch die Spalten-Überschriften sind dann nicht mehr.

An was könnte das liegen?

Ich gebe hier möglichst viel Code mit, damit man sieht, was ich mache.
Ich mache nix in XAML und möchte das in diesem Projekt auch nicht (das sollte auch nicht Ursache des Problems sein).

With dgrx
.AutoGenerateColumns = True
End With

Dim kvpValue As KeyValuePair(Of String, Value)
Dim icData As ItemCollection = dgrx.Items
Dim l As List(Of KeyValuePair(Of String, Value)) = New List(Of KeyValuePair(Of String, Value))

'Dim fNewValue As Single
Dim usr As UnsignedRational
Dim e() As UnsignedRational.Element

For Each kvpValue In ixExifInfo
l.Add(item:=kvpValue)
Next

With dgrx
.ItemsSource = l
.Items.Refresh()
End With


Hier das Event AutoGeneratingColumn:

Private Sub dgrx_AutoGeneratingColumn(sender As Object, 
e As System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs) Handles dgrx.AutoGeneratingColumn


Select Case e.Column.Header.ToString
Case "Key"
With e.Column
.Header = "Name"
End With

Case "Value"
With e.Column
.Header = "Wert"
.IsReadOnly = False
.CanUserSort = True
.CanUserResize = True
.CanUserReorder = True

End With
Case Else
e.Cancel = True
End Select

End Sub


Wie gesagt, beim aller ersten Durchlauf nach Programmstart habe ich "Name" und "Wert" und auch die entsprechenden Werte....
Aber lade ich 'nen neuen Datensatz, läuft nix mehr.

Woran könnte das liegen?

Danke schon mal.
17.08.2012
Dealjagd 43 5
Ich war mal so frei, Deinen Code als Code zu formatieren. Leider hat ck wohl einen Bug und mag die VB-Kommentare nicht so sehr.
Matthias Hlawatsch 18.08.2012
So richtig verständlich ist der Code noch nicht. Man sieht nicht, wann der erste Teil aufgerufen wird. Außerdem werden da gleich 3 Variablen definiert, deren Verwendung Du nicht zeigst (icData, usr, e()). Und schließlich fehlt anscheinend der Code für das Hinzufügen neuer Datensätze (jedenfalls sieht mir der erste Teil eher nach einer initialen Befüllung aus).
Matthias Hlawatsch 18.08.2012
Danke Matthias für die Formatierung.
Der erste Teil wird quasi zum Befüllen mit Daten aufgerufen.
Neue Datensätze werden zu keinem Zeitpunkt hinzugefügt.
Mit With dgrx
.ItemsSource = l
wird die List als ItemsSource hinzugefügt.
Es werden keine neuen Datensätze hinzugefügt.
Irgendwann später werden komplett andere Datensätze angezeigt, und dafür wird exakt derselbe komplette Code nochmals aufgerufen.
usr und e() sind in ausgeschnittenem Code, der meiner Meinung nicht relevant ist. Da wird nur vor dem l.Add(kvpValue) das kvpValue modifiziert, eher aus darstellerischen Gründen.
Dealjagd 18.08.2012
1 Antwort
0
Ok, Problem gelöst!

Ich hatte ein leeres Projekt aufgemacht, um das Problem vereinfacht beschreiben zu können, doch da trat es komischerweise nicht auf. Da der Code im Hauptprojekt auch noch recht übersichtlich ist, führte ich in stellenweise in Einzelschritten aus.
Bis mir auffiel, dass "AutoColumnGenerating" (das ich jeweils mit einem Haltepunkt abfing) auch für bereits vorhandene Header aufgerufen wurde.
Dh nach meinem Code-Beispiel aus der Frage hatte e.column.header.tostring beim neu zuweisen der Daten plötzlich zusätzlich auch Aufrufe mit "Name" und "Wert", die aber unter Case Else gecancelt wurden.

Oder anders: Mit diesem Code ist das Problem gelöst. (An den Feinheiten arbeite ich noch).

Private Sub dgrx_AutoGeneratingColumn(sender As Object,
e As System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs) Handles dgrx.AutoGeneratingColumn


Select Case e.Column.Header.ToString
Case "DisplayName"
With e.Column
.Header = "Name"
.DisplayIndex = 0
End With

Case "DisplayValue"
With e.Column
.Header = "Wert"
.IsReadOnly = False
.CanUserSort = True
.CanUserResize = True
.CanUserReorder = True

End With
Case "Wert" 'der Event-Handler wird für die Column auch aufgerufen und da darf nicht gecanelt werden....
Case "Name" 'hier dasselbe
Case Else
e.Cancel = True
End Select

End Sub



Gute Nacht.
18.08.2012
Dealjagd 43 5

Stelle deine .net-Frage jetzt!