Laden...

Datagrid zeigt nicht alle Einträge an, wenn Spaltenkopf selektiert ist

Erstellt von Caveman vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.221 Views
Caveman Themenstarter:in
187 Beiträge seit 2009
vor 7 Jahren
Datagrid zeigt nicht alle Einträge an, wenn Spaltenkopf selektiert ist

Hallo zusammen,

in einer WPF-Anwendung habe ich zur Anzeige ein Datagrid eingebaut. In einer Spalte wird das Ergebnis aus einer List<T> geholt und zwar immer vom Index 0.
Das merkwürdige dabei ist jetzt, dass wenn ich das DataGrid aktualisiere (Daten werden neu eingelesen), dann funktioniert das nur richtig, wenn die entsprechende Spalte nicht angewählt ist. Ist diese angewählt, dann kommen auch leere Einträge vor, was nicht sein darf.
Bei allen anderen Spalten ist es egal, ob angewählt oder nicht - das Ergebnis ist immer richtig.

Weiß da jemand Rat, woran das liegen kann?

T
314 Beiträge seit 2013
vor 7 Jahren

Klingt für mich nach einem Problem beim Zeichnen des Spalteninhalts. Greifst Du dort irgendwie ein?

Wie kommen denn die Daten ins Grid beim Aktualisieren? Arbeitest Du hier entsprechend mit Bindings und INotifyPropertyChanged?

Caveman Themenstarter:in
187 Beiträge seit 2009
vor 7 Jahren

Also ich greife meiner Meinung nach nicht in die Aktualisierung des Grids ein.

Ich habe folgende Klassen

    public class ResultCollection : ObservableCollection<Result>
    public class Result
    {
        #region Fields
        private List<Shot> shots;
        #endregion

        #region Properties
        public Shooter Shooter { get; set; }
        public Team Team { get; set; }
        public List<Shot> Shots
        {
            get
            {
                shots = shots.OrderBy(v => v.Value).ToList();
                return shots;
            }
            set
            {
                shots = value;
            }
        }
        #endregion

        #region Constructor
        public Result(Shooter shooter, Team team, List<Shot> shotList)
        {
            Shooter = shooter;
            Team = team;
            Shots = shotList;
        }
        #endregion
    }

Befüllt wird immer mit der Methode.

        private void ProcessDatabaseResults()
        {
            Results.Clear();
            HashSet<int> ids = new HashSet<int>();
            Shooter shooter = null;
            Team team = null;
            List<Shot> shotList = null;

            foreach (DataRow row in dbResults.Rows)
            {
                Shot shot = DataColumnConverter.ShotdataToShot(row["shotdata"]);
                if (shot == null)
                {
                    continue;
                }

                int startNumber = DataColumnConverter.IdToInteger(row["idShooters"]);
                if(!ids.Contains(startNumber))
                {
                    ids.Add(startNumber);

                    shooter = DataColumnConverter.ColumnsToShooter(row);
                    shooter.Id = startNumber;
                    shooter.IsDisqualified = false;

                    team = DataColumnConverter.ColumnsToTeam(row["clubsname"]);
                    team.Members++;

                    shotList = new List<Shot>();
                    Results.Add(new Result(shooter, team, shotList));
                }

                shotList.Add(shot);
            }
        }

Wenn die besagte Spalte für die Auf-Absteigende Sortierung angewählt ist, dann ist Result.Shots leer.
Ich kapier nicht, warum.
Zur Veranschaulichung habe ich ein kleines Video beigefügt. Teil 2 folgt separat.

Caveman Themenstarter:in
187 Beiträge seit 2009
vor 7 Jahren

Hier Teil 2.
In DataGrid.z01 umbenennen.

T
314 Beiträge seit 2013
vor 7 Jahren

Nun, wenn Result.Shots leer ist, dann ist ja auch klar warum nichts angezeigt wird 😃.

Hast Du mal mit dem Debugger geschaut, was je nach Situation passiert?

Caveman Themenstarter:in
187 Beiträge seit 2009
vor 7 Jahren

Ja, ich bin mit dem Debugger schon X-mal die Methode durchgegangen.
Ist die besagte Spalte angewählt, dann ist nach

shotList.Add(shot);

die Liste weiterhin leer.
Ist die Spalte nicht angewählt oder eine andere Spalte angewählt, dann ist der Eintrag in der Liste vorhanden.
Wo kann ich sonst noch guggen?