共用方式為


DataGridViewRowCollection.InsertRange(Int32, DataGridViewRow[]) 方法

定義

DataGridViewRow 物件插入位在指定位置中的集合。

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

參數

rowIndex
Int32

要插入資料列的位置。

dataGridViewRows
DataGridViewRow[]

要加入 DataGridViewRowCollectionDataGridViewRow 物件陣列。

例外狀況

dataGridViewRowsnull

rowIndex 小於零或大於集合中的資料列數目。

dataGridViewRows 只包含一個資料列,而它所包含資料列具有的儲存格較此控制項中的資料行為多。

關聯的 DataGridView 控制項正在執行下列其中一個動作,會暫時防止加入新的資料列:

  • 選取控件中的所有儲存格。

  • 清除選取範圍。

-或-

針對下列其中一個 DataGridView 事件 ,從處理常式呼叫這個方法:

-或-

rowIndex 等於集合中的資料列數目,且 AllowUserToAddRowstrue

-或-

DataGridViewDataSource 屬性不是 null

-或-

dataGridViewRows 陣列中至少有一個項目是 null

-或-

DataGridView 沒有資料行。

-或-

dataGridViewRows 陣列中至少有一個資料列具有非 nullDataGridView 屬性值。

-或-

dataGridViewRows 陣列中至少有一個資料列具有 trueSelected 屬性值。

-或-

dataGridViewRows 陣列中有兩個或多個完全相同的資料列。

-或-

dataGridViewRows 陣列中至少有一個資料列包含一個或多個儲存格,但其類型與控制項之相對應資料行的類型不相容。

-或-

dataGridViewRows 陣列中至少有一個資料列包含的儲存格較控制項中的資料行為多。

-或-

這項作業會在未凍結的資料列之後插入凍結的資料列,或是在凍結的資料列之前插入未凍結的資料列。

範例

下列程式代碼範例示範如何使用 InsertRange 方法,在選取的數據列之前插入數據列,以解決一節中所指出的錯誤。

// 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.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

備註

如果可能的話,方法 InsertRange 會將共享資料列加入至 DataGridViewRowCollection。 否則,不會共用新的數據列。 如需詳細資訊,請參閱 縮放 Windows Form DataGridView 控制項的最佳做法

新增數據列時,控件中的數據列不會自動排序。 若要將新數據列排序為正確的位置,請在事件處理程式中DataGridView.RowsAdded呼叫 DataGridView.Sort 方法。 您也可以在事件處理程式中CellValueChanged呼叫 DataGridView.Sort 方法,以在使用者修改儲存格時排序數據列。

重要

由於錯誤,如果選取索引大於rowIndex的任何數據列,InsertRange此方法會讓應用程式停止回應。 若要解決此問題,您必須先取消選取這些數據列,再呼叫此方法,然後重新選取數據列。 如需詳細資訊,請參閱本主題中的程式碼範例。

適用於

另請參閱