DataGridViewRowCollection.AddRange(DataGridViewRow[]) Metod

Definition

Lägger till de angivna DataGridViewRow objekten i samlingen.

public:
 virtual void AddRange(... cli::array <System::Windows::Forms::DataGridViewRow ^> ^ dataGridViewRows);
public virtual void AddRange(params System.Windows.Forms.DataGridViewRow[] dataGridViewRows);
abstract member AddRange : System.Windows.Forms.DataGridViewRow[] -> unit
override this.AddRange : System.Windows.Forms.DataGridViewRow[] -> unit
Public Overridable Sub AddRange (ParamArray dataGridViewRows As DataGridViewRow())

Parametrar

dataGridViewRows
DataGridViewRow[]

En matris med DataGridViewRow objekt som ska läggas till i DataGridViewRowCollection.

Undantag

dataGridViewRows är null.

dataGridViewRows innehåller bara en rad och den rad som den innehåller har fler celler än det finns kolumner i kontrollen.

Den associerade DataGridView kontrollen utför någon av följande åtgärder som tillfälligt förhindrar att nya rader läggs till:

  • Markera alla celler i kontrollen.

  • Rensa markeringen.

-eller-

Den här metoden anropas från en hanterare för någon av följande DataGridView händelser:

-eller-

Egenskapen DataSource för DataGridView är inte null.

-eller-

Minst en post i matrisen dataGridViewRows är null.

-eller-

Har DataGridView inga kolumner.

-eller-

Minst en rad i matrisen dataGridViewRows har ett DataGridView egenskapsvärde som inte nullär .

-eller-

Minst en rad i matrisen dataGridViewRows har egenskapsvärdet Selectedtrue.

-eller-

Två eller flera rader i matrisen dataGridViewRows är identiska.

-eller-

Minst en rad i matrisen dataGridViewRows innehåller en eller flera celler av en typ som inte är kompatibel med typen av motsvarande kolumn i kontrollen.

-eller-

Minst en rad i matrisen dataGridViewRows innehåller fler celler än det finns kolumner i kontrollen.

-eller-

Den här åtgärden skulle lägga till frusna rader efter att rader som inte har frysts.

Exempel

I följande kodexempel visas hur du använder AddRange metoden när raden för nya poster väljs för att kringgå felet som anges i avsnittet Kommentarer.

// Workaround for bug that prevents DataGridViewRowCollection.AddRange
// from working when the row for new records is selected. 
private void AddRows(params DataGridViewRow[] rows)
{
    InsertRows(dataGridView1.RowCount - 1, rows);
}

// Workaround for bug that prevents DataGridViewRowCollection.InsertRange
// from working when any rows before the insertion index are selected.
private void InsertRows(int index, params DataGridViewRow[] rows)
{
    System.Collections.Generic.List<int> selectedIndexes =
        new System.Collections.Generic.List<int>();
    foreach (DataGridViewRow row in dataGridView1.SelectedRows)
    {
        if (row.Index >= index)
        {
            selectedIndexes.Add(row.Index);
            row.Selected = false;
        }
    }
    dataGridView1.Rows.InsertRange(index, rows);
    foreach (int selectedIndex in selectedIndexes)
    {
        dataGridView1.Rows[selectedIndex].Selected = true;
    }
}
' Workaround for bug that prevents DataGridViewRowCollection.AddRange
' from working when the row for new records is selected. 
Private Sub AddRows(ByVal ParamArray rows As DataGridViewRow())
    InsertRows(dataGridView1.RowCount - 1, rows)
End Sub

' Workaround for bug that prevents DataGridViewRowCollection.InsertRange
' from working when any rows before the insertion index are selected.
Private Sub InsertRows(ByVal index As Integer, _
    ByVal ParamArray rows As DataGridViewRow())

    Dim selectedIndexes As New System.Collections.Generic.List(Of Integer)

    For Each row As DataGridViewRow In dataGridView1.SelectedRows
        If row.Index >= index Then
            selectedIndexes.Add(row.Index)
            row.Selected = False
        End If
    Next row

    dataGridView1.Rows.InsertRange(index, rows)

    For Each selectedIndex As Integer In selectedIndexes
        dataGridView1.Rows(selectedIndex).Selected = True
    Next selectedIndex

End Sub

Kommentarer

Metoden AddRange lägger till delade rader i DataGridViewRowCollection, om möjligt. I annat fall tas de nya raderna bort. Mer information finns i Best Practices for Scaling the Windows Forms DataGridView Control.

Rader i kontrollen sorteras inte automatiskt när nya rader läggs till. Om du vill sortera nya rader i rätt position anropar du DataGridView.Sort metoden i en DataGridView.RowsAdded händelsehanterare. Du kanske också vill anropa DataGridView.Sort metoden i en CellValueChanged händelsehanterare för att sortera raderna när användaren ändrar en cell.

Important

På grund av en bugg AddRange kommer metoden att göra så att programmet slutar svara om AllowUserToAddRows egenskapen är true och raden för nya poster har valts. Om du vill kringgå den här buggen måste du avbryta valet av raden innan du anropar den här metoden och sedan avmarkera raden igen. Mer information finns i kodexemplet i det här avsnittet.

Gäller för

Se även