DataGridViewRowCollection.InsertRange(Int32, DataGridViewRow[]) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將 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[]
要加入 DataGridViewRowCollection 的 DataGridViewRow 物件陣列。
例外狀況
dataGridViewRows
為 null
。
rowIndex
小於零或大於集合中的資料列數目。
dataGridViewRows
只包含一個資料列,而它所包含資料列具有的儲存格較此控制項中的資料行為多。
關聯的 DataGridView 控制項正在執行下列其中一個動作,會暫時防止加入新的資料列:
選取控件中的所有儲存格。
清除選取範圍。
-或-
針對下列其中一個 DataGridView 事件 ,從處理常式呼叫這個方法:
-或-
rowIndex
等於集合中的資料列數目,且 AllowUserToAddRows 是 true
。
-或-
DataGridView 的 DataSource 屬性不是 null
。
-或-
dataGridViewRows
陣列中至少有一個項目是 null
。
-或-
DataGridView 沒有資料行。
-或-
dataGridViewRows
陣列中至少有一個資料列具有非 null
的 DataGridView 屬性值。
-或-
dataGridViewRows
陣列中至少有一個資料列具有 true
的 Selected 屬性值。
-或-
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此方法會讓應用程式停止回應。 若要解決此問題,您必須先取消選取這些數據列,再呼叫此方法,然後重新選取數據列。 如需詳細資訊,請參閱本主題中的程式碼範例。
適用於
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應