DataGridView Anzahl der Zeilen begrenzen

Nico Graichen

Erfahrenes Mitglied
Hi zusammen

Kann mir einer von euch sagen, wie ich es anstellen könnte, die Anzahl der Rows in einem DataGridView zu begrenzen?
Hatte erst gehofft, ich kann das Event RowsAdded canceln, aber leider geben mir die EventArgs nicht die Möglichkeit dazu.

Danke
 
Also ich würde das ganze so machen:

C#:
    public class LimitedDataGridView : System.Windows.Forms.DataGridView
    {
        public LimitedDataGridView (int maxRows)
        {
            if (maxRows < 1)
                throw new ArgumentOutOfRangeException("maxRows", maxRows,
                                                      "The maximal Number of Rows must be more than 0");
            
            this.maxRows = maxRows;
            this.RowsAdded += new DataGridViewRowsAddedEventHandler(this.rowAdded);
        }
        
        private void rowAdded(object sender, DataGridViewRowsAddedEventArgs args)
        {
            //wenn im Limit Bereich, die Funktion abbrechen
            if (this.Rows.Count <= this.maxRows)
                return;

            //alle Reihen ab der letzten zulässigen Reihe löschen
            for (int i = this.maxRows; i < this.Rows.Count; i++)
            {
                this.Rows.RemoveAt(i);
            }
        }
        
        private int maxRows;
    }

Nur geht diese Lösung nicht :-D Beim Rows.RemoveAt(); schmeisst er so ne Blöde Exception (Uncommitted new row cannot be deleted.) hm.. kA was falsch is, vll. kann sichs mal wer anschaun würd mich interessieren ;)

Lg, Yanick
 
Das Löschen der letzten Zeile in dem Event hab ich schon probiert. das Problem dabei ist, dass ich dabei eine Exception bekomme in External Code, das der RowIndex außerhalb des gültigen Bereichs ist. Die ich nicht abfangen kann. Und die Zeile die ich lösche gibt es auch.

@yan1
Dass du bei die Exception bekommst, liegt daran dass du versuchst die letzte (unterste, die mit dem Sternchen davor) Zeile mit zu löschen. Bei dieser ist jedoch das Property IsNewRow auf true gesetzt und kann deswegen nicht gelöscht werden. Diese Zeile ist, wie die Exception schon sagt, uncommited.
 
Dass du bei die Exception bekommst, liegt daran dass du versuchst die letzte (unterste, die mit dem Sternchen davor) Zeile mit zu löschen.

Also ich verstehs nich.... ich habs mir jetzt im Debugger eine Zeit lang angeschaut... aber ich finde keinen Fehler:
Wenn ich maxRows auf 5 setze, und beim sechsten Element bin und Enter drücke, wird der Index Nummer 5 in der RawCollection gelöscht mit RemoveAt(), nur dann löst er eine ArgumentOutOfRange Exception (Row index provided is out of range.
Parameter name: rowIndex) aus, obwohl ich Index Nummer 5 lösche, und 6 sind enthalten!
 
Das ist das selbe verhalten wie bei mir. Und das beischeidene ist halt, wie gesagt, dass sie diese Exception nicht abfangen lässt.
Ich rufe aus meiner Hauptform eine extra Form mir dem DGV auf. und die Excption tritt bei ShowDialog der extra Form auf :confused:

//EDIT
ist mir grad noch so eingefallen. Ich werd am Montag noch die Option aktivieren, dass direkt an der Exception angehalten wird. Vielleicht bringt mich das ja nen Schritt weiter.
Aber ich bin echt ratlos
 
Zuletzt bearbeitet:
Ok, ich habs. Nach erneutem Durchforsten der Properties hab ich gefunden.
Man muss das Property AllowUserToAddRows auf False setzen und die eine Zeile programmatisch hinzufügen und schon ist das gewünscht verhalten da.

Danke an alle
 

Neue Beiträge

Zurück