DataGridViewRowCollection.AddRange(DataGridViewRow[]) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將指定的 DataGridViewRow 物件加入該集合。
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())
參數
- dataGridViewRows
- DataGridViewRow[]
要加入到 DataGridViewRowCollection 的 DataGridViewRow 物件陣列。
例外狀況
dataGridViewRows
為 null
。
dataGridViewRows
只包含一個資料列,而它所包含資料列具有的儲存格較此控制項中的資料行為多。
關聯的 DataGridView 控制項正在執行下列其中一個動作,會暫時防止加入新的資料列:
選取控件中的所有儲存格。
清除選取範圍。
-或-
針對下列其中一個 DataGridView 事件 ,從處理常式呼叫這個方法:
-或-
DataGridView 的 DataSource 屬性不是 null
。
-或-
dataGridViewRows
陣列中至少有一個項目是 null
。
-或-
DataGridView 沒有資料行。
-或-
dataGridViewRows
陣列中至少有一個資料列具有非 null
的 DataGridView 屬性值。
-或-
dataGridViewRows
陣列中至少有一個資料列具有 true
的 Selected 屬性值。
-或-
dataGridViewRows
陣列中有兩個或多個完全相同的資料列。
-或-
dataGridViewRows
陣列中至少有一個資料列包含一個或多個儲存格,但其類型與控制項之相對應資料行的類型不相容。
-或-
dataGridViewRows
陣列中至少有一個資料列包含的儲存格較控制項中的資料行為多。
-或-
這項作業會將凍結的資料列加在未凍結的資料列後面。
範例
下列程式代碼範例示範如何在選取新記錄的數據列時使用 AddRange 方法,以解決一節中所指出的錯誤。
// 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
備註
如果可能的話,方法 AddRange 會將共享資料列加入至 DataGridViewRowCollection。 否則,不會共用新的數據列。 如需詳細資訊,請參閱 縮放 Windows Form DataGridView 控制項的最佳做法。
新增數據列時,控件中的數據列不會自動排序。 若要將新數據列排序為正確的位置,請在事件處理程式中DataGridView.RowsAdded呼叫 DataGridView.Sort 方法。 您也可以在事件處理程式中CellValueChanged呼叫 DataGridView.Sort 方法,以在使用者修改儲存格時排序數據列。
重要
由於錯誤,如果 屬性為 true
,而且已選取新記錄的數據列,AddRange方法會讓應用程式停止回應AllowUserToAddRows。 若要解決這個 Bug,您必須先取消選取數據列,再呼叫此方法,然後重新選取數據列。 如需詳細資訊,請參閱本主題中的程式碼範例。