Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Datagrid zeigt nicht alle Einträge an, wenn Spaltenkopf selektiert ist
Caveman
myCSharp.de - Member

Avatar #avatar-3854.jpg


Dabei seit:
Beiträge: 140

Themenstarter:

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

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 319

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Caveman
myCSharp.de - Member

Avatar #avatar-3854.jpg


Dabei seit:
Beiträge: 140

Themenstarter:

beantworten | zitieren | melden

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.
Attachments
private Nachricht | Beiträge des Benutzers
Caveman
myCSharp.de - Member

Avatar #avatar-3854.jpg


Dabei seit:
Beiträge: 140

Themenstarter:

beantworten | zitieren | melden

Hier Teil 2.
In DataGrid.z01 umbenennen.
Attachments
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 319

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Caveman
myCSharp.de - Member

Avatar #avatar-3854.jpg


Dabei seit:
Beiträge: 140

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers