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
数组中至少有一行的 DataGridView 属性值不为 null
。
- 或 -
dataGridViewRows
数组中至少有一行的 Selected 属性值为 true
。
- 或 -
dataGridViewRows
数组中的两行或更多行相同。
- 或 -
dataGridViewRows
数组中至少有一行包含与控件中相应列的类型不兼容的类型的一个或多个单元格。
- 或 -
dataGridViewRows
数组中至少有一行包含的单元格数大于控件中的列数。
- 或 -
此操作将在未冻结行之后添加冻结行。
示例
下面的代码示例演示如何在选择新记录的行时使用 AddRange 方法,以解决“备注”部分中指示的 bug。
// 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 窗体 DataGridView 控件的最佳做法。
添加新行时,控件中的行不会自动排序。 若要将新行排序到正确的位置,请在事件处理程序中DataGridView.RowsAdded调用 DataGridView.Sort 方法。 你可能还希望在事件处理程序中CellValueChanged调用 DataGridView.Sort 方法,以在用户修改单元格时对行进行排序。
重要
由于 bug, AddRange 如果 AllowUserToAddRows 属性为 true
并且选择了新记录的行,则 方法将使应用程序停止响应。 若要解决此 bug,必须在调用此方法之前取消选择行,然后重新选择该行。 有关详细信息,请参阅本主题中的代码示例。