C# DataGridView Sortierung funktioniert nur mit Verzögerung

Dabei seit
Mai 2007
Beiträge
149
Hallo,

Ich habe folgendes Problem:
Ich habe ein DataGridView. Dabei ist die erste Spalte nur für die sortierung gedacht, enthält also nur Zahlen von 1 bis X. Nach dieser Spalte wird das GridView aufsteigend sortiert. Das Programm vertauscht dann Idizes um so die Reihenfolge zu verändern. Das Problem ist, das sich diese Änderung nicht sofort, sondern teilweise nur mit etwas Verzögerung auf die Sortierung auswirkt. Auch ein Refresh() auf das DataGridView hilft nicht. Hat jemand eine Idee?

Grüsse,
Stefan
 

Madman1209

Fleet Admiral
Dabei seit
Nov. 2010
Beiträge
24.968
Hi,

um wie viele Daten geht es dabei denn? Kannst du ein wenig Beispielcode posten? Hast du selbst eine Sortierung implementiert oder verwendest du den Standard vom DGV?

VG,
Mad
 

StefanDinslaken

Ensign
Ersteller dieses Themas
Dabei seit
Mai 2007
Beiträge
149
Hier mal der Code, ich hoffe der ist nicht zu unübersichtlich:

data_view ist der DataGridView

Es handelt sich um eine Playlist, wobei die ID, die die Position in der Playlist bestimmt in Spalte 10 ist.

Code:
public void move_song(int hier_nach_einf, int hier_vor_einf, int versch_song)
        {

            if (MainForm.data_view.SelectedRows.Count > 1) return;

            int song_id = versch_song;

            if (song_id == hier_nach_einf || song_id == hier_vor_einf) return;


            bool top_down;
            if (song_id > hier_nach_einf)
            {
                top_down = false;
            }
            else
            {
                top_down = true;
            }

            // Jeder alten Nummer eine neue zuordnen...
            int[] alt_nach_neu = new int[MainForm.data_view.RowCount + 1];
            foreach (DataGridViewRow a in MainForm.data_view.Rows)
            {
                alt_nach_neu[(int)a.Cells[10].Value] = move_song_get_new_number((int)a.Cells[10].Value, song_id, hier_vor_einf, hier_nach_einf, top_down);
            }

            // Sortierung nach Nummer aufheben
            MainForm.data_view.Sort(MainForm.data_view.Columns[9], ListSortDirection.Ascending);

            // DataRows im DataView anpassen
            foreach (DataGridViewRow a in MainForm.data_view.Rows)
            {
                a.Cells[10].Value = alt_nach_neu[(int)a.Cells[10].Value];
            }

            //PLAYLIST ID HERAUSFINDEN
            int pid = int.Parse(MainForm.data_view.Rows[0].Cells[6].Value.ToString().Split('_')[0].Substring(1));

            // DataRows im DataTable anpassen
            foreach (DataRow a in tables[pid].Rows)
            {
                int neuerwert = alt_nach_neu[(int)a.ItemArray[10]];
                a.BeginEdit();
                a[10] = neuerwert;
                a.EndEdit();

                // Einträge in Datenbank anpassen
                XmlDocument doc = docs[pid];
                XmlNode xmln = MainForm.datenbank.gv_songs[int.Parse(a[6].ToString().Split('_')[1])];
                xmln["playlists_position"].InnerText = neuerwert.ToString();
                doc.Save("base\\p_" + pid + ".xml");
            }


            MainForm.data_view.Refresh();
            MainForm.data_view.Sort(MainForm.data_view.Columns[10], ListSortDirection.Ascending);

        }
 
Zuletzt bearbeitet:
M

Marguth

Gast
programmierst du Objektorientiert?

Ich würde empfehlen dir das Object Song zu machen und an dein Datagridview eine List<Song> zu hängen.
Und dann jegliches bearbeiten über die List zu machen.
Sparst dir später einiges an arbeit und umgehst einige Probleme die das Datagridview macht.

Was hat es mit der 10 auf sich? (Cells[10]) kann dein grid maximal 10 songs haben oder wie ist das gemeint?
 
Zuletzt von einem Moderator bearbeitet:
Top