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