選択されているすべての行を削除するには?
対象製品
MultiRow for Windows Forms 10.0J
詳細
GcMultiRowコントロールで、ユーザーによって選択された行をすべて削除するにはいくつかの方法を利用できます。
次のコードは、削除するコードを試すためにGcMultiRowコントロールに行を追加し、すべての行を選択します。
[Visual Basic]
[C#]
1. アクションを使う
ショートカット キーの組み込みのアクションを使用すると、次の処理で選択行を削除できます。
[Visual Basic]
[C#]
※新規行は削除の対象となりません。新規行を無効にするには、GcMultiRow.AllowUserToAddRows プロパティを False に設定します。
2. 選択コレクションのコピーを使う
選択コレクションのコピーを使って行を削除する場合は、コレクションを直接参照しないので行を削除することによるインデックスのずれを考慮する必要がありません。
[Visual Basic]
[C#]
3. LINQを使う
LINQを使用できる環境では、次のようなコードで選択されているすべての行を削除できます。
[Visual Basic]
[C#]
または、次のように記述して選択以外の条件に対応することもできます。
[Visual Basic]
[C#]
または、各言語の構文を使用して同様の処理を記述できます。
[Visual Basic]
[C#]
参考:DataGridViewとの違い
DataGridViewコントロールでは、次のコードによって選択された行を削除できますが、同様のコードはGcMultiRowコントロールでは異なる動作となります。GcMultiRowコントロールは行が削除された際に既存の選択範囲を解除します。これは、パフォーマンスを向上するためのGcMultiRow固有の実装によるものです。
[Visual Basic]
[C#]
次のコードは、削除するコードを試すためにGcMultiRowコントロールに行を追加し、すべての行を選択します。
[Visual Basic]
Imports GrapeCity.Win.MultiRow Me.GcMultiRow1.RowCount = 10 SelectionActions.SelectAll.Execute(Me.GcMultiRow1)
[C#]
using GrapeCity.Win.MultiRow; this.gcMultiRow1.RowCount = 10; SelectionActions.SelectAll.Execute(this.gcMultiRow1);
1. アクションを使う
ショートカット キーの組み込みのアクションを使用すると、次の処理で選択行を削除できます。
[Visual Basic]
Imports GrapeCity.Win.MultiRow EditingActions.DeleteSelectedRows.Execute(Me.GcMultiRow1)
[C#]
using GrapeCity.Win.MultiRow; EditingActions.DeleteSelectedRows.Execute(this.gcMultiRow1);
※新規行は削除の対象となりません。新規行を無効にするには、GcMultiRow.AllowUserToAddRows プロパティを False に設定します。
2. 選択コレクションのコピーを使う
選択コレクションのコピーを使って行を削除する場合は、コレクションを直接参照しないので行を削除することによるインデックスのずれを考慮する必要がありません。
[Visual Basic]
Imports GrapeCity.Win.MultiRow Dim gcMultiRow As GcMultiRow = Me.GcMultiRow1 Dim selectedRows() As Row = New Row(gcMultiRow.SelectedRows.Count - 1) {} gcMultiRow.SelectedRows.CopyTo(selectedRows, 0) For i As Integer = selectedRows.Length - 1 To 0 Step -1 If Not selectedRows(i).IsNewRow Then gcMultiRow.Rows.Remove(selectedRows(i)) End If Next
[C#]
using GrapeCity.Win.MultiRow; GcMultiRow gcMultiRow = this.gcMultiRow1; Row[] selectedRows =new Row[gcMultiRow.SelectedRows.Count]; gcMultiRow.SelectedRows.CopyTo(selectedRows, 0); for (int i = 0; i < selectedRows.Length; i++) { if(!selectedRows[i].IsNewRow) gcMultiRow.Rows.Remove(selectedRows[i]); }
3. LINQを使う
LINQを使用できる環境では、次のようなコードで選択されているすべての行を削除できます。
[Visual Basic]
Imports GrapeCity.Win.MultiRow Dim gcMultiRow As GcMultiRow = Me.GcMultiRow1 For Each selectedRow As Row In gcMultiRow.SelectedRows.OrderByDescending(Function(row) row.Index) If Not selectedRow.IsNewRow Then gcMultiRow.Rows.RemoveAt(selectedRow.Index) End If Next
[C#]
using GrapeCity.Win.MultiRow; GcMultiRow gcMultiRow = this.gcMultiRow1; foreach (Row selectedRow in gcMultiRow.SelectedRows.OrderByDescending(row => row.Index)) { if (!selectedRow.IsNewRow) gcMultiRow.Rows.RemoveAt(selectedRow.Index); }
または、次のように記述して選択以外の条件に対応することもできます。
[Visual Basic]
Dim gcMultiRow As GcMultiRow = Me.GcMultiRow1 Dim query As IEnumerable(Of Row) = gcMultiRow.Rows.Where(Function(row) row.Selected AndAlso Not row.IsNewRow).OrderByDescending(Function(row) row.Index) For Each selectedRow As Row In query gcMultiRow.Rows.RemoveAt(selectedRow.Index) Next
[C#]
GcMultiRow gcMultiRow = this.gcMultiRow1; IEnumerable<Row> query = gcMultiRow.Rows.Where(row => row.Selected && !row.IsNewRow).OrderByDescending(row => row.Index); foreach (Row selectedRow in query) { gcMultiRow.Rows.RemoveAt(selectedRow.Index); }
または、各言語の構文を使用して同様の処理を記述できます。
[Visual Basic]
Dim gcMultiRow As GcMultiRow = Me.GcMultiRow1 Dim query = From row As Row In gcMultiRow.Rows Where row.Selected AndAlso Not row.IsNewRow Order By row.Index Descending Select row For Each selectedRow As Row In query gcMultiRow.Rows.RemoveAt(selectedRow.Index) Next
[C#]
GcMultiRow gcMultiRow = this.gcMultiRow1; var query = from Row row in gcMultiRow.Rows where row.Selected && !row.IsNewRow orderby row.Index descending select row; foreach (var selectedRow in query) { gcMultiRow.Rows.RemoveAt(selectedRow.Index); }
参考:DataGridViewとの違い
DataGridViewコントロールでは、次のコードによって選択された行を削除できますが、同様のコードはGcMultiRowコントロールでは異なる動作となります。GcMultiRowコントロールは行が削除された際に既存の選択範囲を解除します。これは、パフォーマンスを向上するためのGcMultiRow固有の実装によるものです。
[Visual Basic]
Me.dataGridView1.RowCount = 10 Me.dataGridView1.SelectAll() Dim dataGridView As DataGridView = Me.DataGridView1 For i As Integer = dataGridView.RowCount - 1 To 0 Step -1 If dataGridView.Rows(i).Selected = True AndAlso Not dataGridView.Rows(i).IsNewRow Then dataGridView.Rows.RemoveAt(i) End If Next
[C#]
this.dataGridView1.RowCount = 10; this.dataGridView1.SelectAll(); DataGridView dataGridView = this.dataGridView1; for (int i = dataGridView.RowCount - 1; i > -1; i--) { if (dataGridView.Rows[i].Selected == true && !dataGridView.Rows[i].IsNewRow) dataGridView.Rows.RemoveAt(i); }