none
Datagrid Zelle wiederholt beschreiben RRS feed

  • Frage

  • Hi zusammen,
    benötige mal wieder kompetente Hilfe.

    Über eine SQL query und eine  private List<Eingabe> _data = new List<Eingabe>();
    erzeuge ich ein Datagrid.

    mit:

     DataGridRow row = dg.ItemContainerGenerator.ContainerFromItem(dg.Items[Convert.ToInt32(RowIndex)])as DataGridRow;
     DataGridCell cell = dg.Columns[4].GetCellContent(row).Parent as DataGridCell;
     cell.Content = "XYZ";
    beschreibe ich die gewünschte Zelle. Das Ergebnis ist sofort sichtbar.


    sobald ich den Vorgang wiederhole bekomme ich folgende Fehlermeldung:
      "System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Frage: was muß ich tun um das Beshreiben beliebig oft wiederholen zu können?

    Mit freundlichen Grüssen und besten Dank
    Carl-Heinz


     
    Montag, 11. Juli 2016 16:18

Antworten

  • Hi Carl-Heinz,
    welcher Objektverweis fehlt denn? Ursache kann sein, dass auf dg nicht zugegriffen werden kann, dass es kein 5 Spalten gibt, dass RowIndex oder row einen unpassenden Wert hat usw.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen! Leben retten!
    Wir essen Opa.
    Wir essen, Opa.

    Montag, 11. Juli 2016 18:50
  • Hi Peter, Hi Elmar,

    die row war beim zweiten Durchlauf deswegen unbrauchbar, da sie an anderer Stelle überschrieben wurde.

    Nachdem ich sichergestellt habe, das row und cell erhalten bleiben funktioniert alles bestens.

    Danke für die Hilfe und Entshuldigung für diesen elementaren Fehler.

    Viele Grüße

    Carl-Heinz

    Dienstag, 12. Juli 2016 14:00

Alle Antworten

  • Hi Carl-Heinz,
    welcher Objektverweis fehlt denn? Ursache kann sein, dass auf dg nicht zugegriffen werden kann, dass es kein 5 Spalten gibt, dass RowIndex oder row einen unpassenden Wert hat usw.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen! Leben retten!
    Wir essen Opa.
    Wir essen, Opa.

    Montag, 11. Juli 2016 18:50
  • Hi Peter,

    danke für die rasche Antwort.

    Das Programm steigt beim zweiten Durchlauf bei row mit der Meldung: "System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.\r\n...  

    Der RowIndex ist aber beim ersten wie auch beim zweiten Durchlauf = 2

    Viele Grüsse

    Carl-Heinz


    Dienstag, 12. Juli 2016 06:12
  • Hi Carl-Heinz,
    welcher Objektverweis fehlt denn? Ursache kann sein, dass auf dg nicht zugegriffen werden kann, dass es keine 5 Spalten gibt, dass RowIndex oder row einen unpassenden Wert beim zweiten Durchlauf hat usw.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen! Leben retten!
    Wir essen Opa.
    Wir essen, Opa.


    Dienstag, 12. Juli 2016 06:18
  • Hi Peter,

    es sieht so aus als hätte row beim zweiten Durchlauf einen unpassenden Wert.

    Hast Du einen Tip welche der vielen Werte dafür in Frage kommen könnten?

    oder gibt es ein Verfahren beide row Werte zu vergleichen?

    Viele Grüsse

    Carl-Heinz

    Dienstag, 12. Juli 2016 07:04
  • Hallo Robert,

    der übliche Verdächtige wäre die Virtualisierung. Siehe dazu DataGrid.EnableRowVirtualization-Eigenschaft.

    Warum verwendest Du nicht Bindung über eine ItemSourceund ObservableCollection? Dann müsstest Du nicht über das DataGrid auf die Daten zugreifen, sondern könntest die Eigenschaft in der Klasse (mit INotifyPropertyChanged) verändern und den Rest der Automatik überlassen.

    Gruß Elmar

    Dienstag, 12. Juli 2016 07:36
    Beantworter
  • Hallo Elmar,

    danke für den Tip.

    Frage warum funktioniert es beim ersten Durchlauf, nicht aber beim zweiten.

    Der Wert der Zelle wird beim wiederholten Durchlauf zwar ordnungsgemäß geändert, aber das Ergebnis wird nicht angezeigt. Es geht mir nur darum auch bei weiteren Durchläufen das Ergebis anzuzeigen.

    Gruß Carl-Heinz

    Dienstag, 12. Juli 2016 07:57
  • Hallo Carl-Heinz,

    wenn Du einen Nullverweis hast, kann das nicht funktionieren. Selbst mit try catch fliegt der Code vor der Zuweisung raus.

    Wenn da was geändert wird, so könnte es evtl. eine andere Zeile sein. Wenn Du die Hinweise zu EnableRowVirtualization durchliest, so wird dort auch erwähnt, dass DataGridRow Elemente recycelt werden können.

    Gruß Elmar

    Dienstag, 12. Juli 2016 08:05
    Beantworter
  • Hi Peter, Hi Elmar,

    die row war beim zweiten Durchlauf deswegen unbrauchbar, da sie an anderer Stelle überschrieben wurde.

    Nachdem ich sichergestellt habe, das row und cell erhalten bleiben funktioniert alles bestens.

    Danke für die Hilfe und Entshuldigung für diesen elementaren Fehler.

    Viele Grüße

    Carl-Heinz

    Dienstag, 12. Juli 2016 14:00