Autor Beitrag
AlexMack
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 07.01.11 10:03 
Hallo gemeinsam!

Ich habe ein Problem mit einem Gridview - element. Es ist so, dass meine Gridview nicht aus einer Datasource versorgt wird (weil sonst andere Funktionen , die ich bereits implementiert habe, nicht mehr funktionieren würden), sondern aus mehreren Arrays und die Daten aus dem Array ständig mit den Daten aus dem DataGridview - element synchronisiert werden müssen. Jetzt möchte ich, dass der Benutzer mehrere Zeilen (z.B. 2,4,7) markieren und löschen kann.
Hier ist nun das Problem: ich kopiere die vom benutzer markierten zeilen in eine Variable und möchte diese mit einer SChleife löschen. Das funktioniert für die 1. zeile des Arrays tadelos, im 2. und 3. Durchlauf der Schleife wird er Arrayindex auf -1 gesetzt und die schleife wird nicht durchlaufen. Was mache ich falsch?

Hier ist meine Funktion:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
private void deleteRowToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                int anzahl = dataGridView1.SelectedRows.Count;
                var myRows = dataGridView1.SelectedRows;

                for (int k = anzahl - 1; k >= 0; k--)
                {
                    DataGridViewRow row = myRows[k];
                    if (row.Index >= 0 && row.Index < dataGridView1.Rows.Count)
                    {

                        int realRunIndex = 0;
                        int runIndex = (row.Index - 2) / 4;
                        int[][][] originData = dataGridView1.Rows[row.Index].Tag as int[][][];
                        if (m_StepIndex < 3)
                        {
                            runIndex = runIndex + ((m_StepIndex) * 4);
                        }
                        else
                        {
                            switch (runIndex)
                            {
                                case 0:
                                    runIndex = 1;
                                    break;
                                case 1:
                                    runIndex = 5;
                                    break;

                                case 2:
                                    runIndex = 9;
                                    break;

                            }
                        }

                        if (originData.Length > runIndex && originData[runIndex] != null)
                            realRunIndex = originData[runIndex][row.Index][1];
                       

                        int peakIndex = 0;
                        int changedPeakIndex = 0;
                        if (originData.Length == 1)
                        {
                            peakIndex = ((int[])originData[0][row.Index])[0];
                            changedPeakIndex = ((int[])originData[0][row.Index])[2];
                        }
                        else
                        {
                            peakIndex = ((int[])originData[runIndex][row.Index])[0];
                            changedPeakIndex = ((int[])originData[runIndex][row.Index])[2];
                        }

                        int[] indexArray = new int[Runs.Length];
                        for (int i = 0; i < Runs.Length; i++)
                        {
                            indexArray[i] = i;
                        }

                        CommandManager.Execute(new ChangeDataEntryGridCommand(ChangedRuns, new ChangeDataEntryGridCommand.DoSomething(RemoveAllPeaks), new object[] { indexArray, changedPeakIndex }));
                    }
                }
            }
            
            buildTable();
            
        }


ich hoffe, jemand von Euch kann mir helfen... danke bereits im voraus

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Fr 07.01.11 20:53 
Hallo und :welcome:

Also, ich muss gestehen, dass ich nicht wirklich verstanden habe, was Du in der Prozedur machst.
Kann aber gut sein, dass ich heute nicht mehr wirklich aufnahmefähig bin oder der Code einfach viel zu Overhead ist, um ein paar Zeilen aus der Grid zu löschen.
Du brauchst Dir doch gar nicht solche Sachen wie realIndex, peakIndex und was noch so alles angewendet wird, zu merken.
Die Lösung könnte so einfach aussehen:
ausblenden C#-Quelltext
1:
2:
3:
4:
foreach (DataGridViewRow row in dataGridView1.SelectedRows.OfType<DataGridViewRow>())
{
  dataGridView1.Rows.Remove(row);
}

Marko
AlexMack Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 10.01.11 09:45 
Das Problem ist nicht die Gridview... das ist nur der Datencontainer. Wenn ich die Zeilen im Gridview lösche, dann tauchen sie im nächsten rebuild der Tabelle wieder auf und das ist nicht sinn und zweck der übung... übrigens hat dein einwurf das problem anders beleuchtet. Der Commandmanager setzt die Parameter auf null zurück... vielleicht muss der aus der schleife und die ganze Löschprozedur abinitio ausführen.... ja, so funktioniert das