none
DataGridColumn beschränkt auf sichtbare Zellen? RRS feed

  • Allgemeine Diskussion

  • Hallo,

     

    ich arbeite momentan an einem DataGrid in welchem es ~70 Zeilen gibt, die meisten davon kann man nur per scrolling erreichen.

    Nun habe ich eine bestimmte Spalte ausgesucht und will den Zelleninhalt einer bestimmten Zeile in dieser Spalte bekommen.

    Momentan habe ich das hiermit gelöst(die folgenden Typecast's funktionieren, da dies einen expliziten Test darstellt):

              DataGridTextColumn col = (DataGridTextColumn)_MontageGrid.Columns[column];
              FrameworkElement element = col.GetCellContent(nfo);
              TextBlock block = ((TextBlock)element);
    


    Nun iteriere ich durch alle Zeilen (nfo stellt den Datensatz einer Zeile dar) und will die entsprechenden TextBlock's bekommen. Das klappt alles wunderbar, allerdings gibt GetCellContent aber eine bestimmten Zeile nur noch "null" zurück. Durch mehrere Tests ist mir aufgefallen, dass diese Zeile genau die erste Zeile ist die nur noch mittels scrolling erreichbar ist.

    Es scheint also so zu sein, dass in der DataGridColumn nur die Daten existieren die im direkt sichtbaren Bereich des DataGrid liegen.

     

    Gibt es eine Abhilfe um diesem Phänomen zu entgehen? Hat einer von euch schon einmal dieses Problem gehabt?

     

    Mit freundlichen Grüßen,

    Cauchy2

     

     

    Freitag, 5. August 2011 13:13

Alle Antworten

  • Hallo Cauchy2,

    am besten, du holst dir deine Datensätze aus deiner ItemsSource, die du an dein DataGrid gebunden hast. Sofern du MVVM verwendest befinden sich deine Daten im ViewModel.

    Ich hoffe ich konnte dir weiterhelfen...

    Viele Grüße
    Holger M. Rößler


    Kaum macht man es richtig, schon funktioniert es
    Freitag, 5. August 2011 19:52
  • Das hatte ich schon versucht, das Problem dabei ist, dass ich die Datensaetze auch veraendern moechte und dies direkt ueber die ItemsSource nicht wirklich klappt.

    Die Controls sind zwar per Binding mit der ItemsSource verbunden, jedoch bewirkt eine direkte Aenderung der ItemsSource kein Update der entsprechenden Controls auf dem GUI.

    Jetzt wollte ich den umgedrehten Weg gehen und die Werte der Controls veraendern und damit ebenfalls eine Aenderung der ItemsSource hervorrufen. Das funktioniert auch wunderbar, bis auf das Problem, dass ich mir nicht jedes Control zurueckgeben lassen kann.

    Dienstag, 9. August 2011 09:00
  • Hi,

     

    Die Controls sind zwar per Binding mit der ItemsSource verbunden, jedoch bewirkt eine direkte Aenderung der ItemsSource kein Update der entsprechenden Controls auf dem GUI.

     

    löst du nach dem Ändern der Daten im ViewModel das PropertyChanged Event aus?

    Viele Grüße
    Holger M. Rößler


    Kaum macht man es richtig, schon funktioniert es
    Dienstag, 9. August 2011 09:09
  • Ja, ich habe als ItemsSource eine Collection von diesem Datentyp:

     

      public class GridChannelInfo
      {
       public int Index { get; set; }    
       public ChannelInfo ChanInfo { get; set; }
      }  
    

     


    Ich hatte mir noch eine Methode implementiert:

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;  
    
     public void OnPropertyChanged(String info)
      {
       if (PropertyChanged != null)
       {
        PropertyChanged(this, new PropertyChangedEventArgs(info));
       }
      }


    Wenn ich jetzt per Code ChanInfo aendere dann rufe ich OnPropertyChanged("ChanInfo") auf.

     


    Dienstag, 9. August 2011 09:31
  • Hi,

    und wer löst das Event aus? So wie ich das sehe, löst deine Property "ChanInfo"  in dem set-Accessor eben kein PropertyChanged aus!?!?!?

    Viele Grüße
    Holger M. Rößler


    Kaum macht man es richtig, schon funktioniert es
    Dienstag, 9. August 2011 09:36
  • Ich hatte zwei Möglichkeiten versucht, beide funktionieren leider nicht. Einmal indem ich OnPropertyChanged(....) in dem set-Accessor aufrufe und einmal direkt nachdem ich meine Daten ueberschrieben hatte. Beides leider ohne Erfolg.
    Dienstag, 9. August 2011 11:22
  • Hmm seltsam. Vielleicht kannst du mal den betreffenden Code (XAML und Code behind) posten...

    Viele Grüße
    Holger M. Rößler


    Kaum macht man es richtig, schon funktioniert es
    Dienstag, 9. August 2011 11:45