すべてのセルの値をクリアするには?

文書番号 : 40559     文書種別 : 使用方法     登録日 : 2017/07/26     最終更新日 : 2017/07/26
文書を印刷する
対象製品
MultiRow for Windows Forms 10.0J
詳細
グリッドのすべてのセルの値をクリアするには、行数とセル数を元にすべてのセルにnull(Visual BasicではNothing)を設定します。

[Visual Basic]
Imports GrapeCity.Win.MultiRow

Dim gcMultiRow As GcMultiRow = Me.GcMultiRow1
For rowIndex As Integer = 0 To gcMultiRow.RowCount - 1
    For cellIndex As Integer = 0 To gcMultiRow.Template.Row.Cells.Count - 1
        If Not TypeOf gcMultiRow.Template.Row.Cells(cellIndex) Is HeaderCell Then
            gcMultiRow.SetValue(rowIndex, cellIndex, Nothing)
        End If
    Next
Next


[C#]
using GrapeCity.Win.MultiRow;

GcMultiRow gcMultiRow = this.gcMultiRow1;
for (int rowIndex = 0; rowIndex < gcMultiRow.RowCount; rowIndex++)
{
    for (int cellIndex = 0; cellIndex < gcMultiRow.Template.Row.Cells.Count; cellIndex++)
    {
        if (!(gcMultiRow.Template.Row[cellIndex] is HeaderCell))
            gcMultiRow.SetValue(rowIndex, cellIndex, null);
    }
}


拡張メソッドとして実装する場合は次のようにコーディングします。

[Visual Basic]
Imports GrapeCity.Win.MultiRow
Imports System.Runtime.CompilerServices

Public Module GcMultiRowExtension

    <Extension()> _
    Public Sub Clear(ByVal gcMultiRow As GcMultiRow)
        Clear(gcMultiRow, AddressOf ClearWithoutHeaderCell)
    End Sub

    Private Function ClearWithoutHeaderCell(ByVal gcMultiRow As GcMultiRow, ByVal rowIndex As Integer, ByVal cellIndex As Integer) As Boolean
        If Not TypeOf (gcMultiRow.Template.Row(cellIndex)) Is HeaderCell Then Return True
        Return False
    End Function

    Public Delegate Function ClearConditionHandler(ByVal gcMultiRow As GcMultiRow, ByVal rowIndex As Integer, ByVal cellIndex As Integer) As Boolean

    <Extension()> _
    Public Sub Clear(ByVal gcMultiRow As GcMultiRow, ByVal condition As ClearConditionHandler)
        For rowIndex As Integer = 0 To gcMultiRow.RowCount - 1
            For cellIndex As Integer = 0 To gcMultiRow.Template.Row.Cells.Count - 1
                If condition(gcMultiRow, rowIndex, cellIndex) Then
                    gcMultiRow.SetValue(rowIndex, cellIndex, Nothing)
                End If
            Next
        Next
    End Sub

End Module

' 呼び出し例1 : ヘッダ型セルを除くすべてのセルの値を null に設定する
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Me.GcMultiRow1.Clear()
End Sub

' 呼び出し例2 : 選択されたセルだけ消去する
'(ヘッダはSelectableではないので自動的に除外される。
' 行ヘッダセルが選択状態の場合はセルではなく行自体が選択されている。)
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Me.GcMultiRow1.Clear(AddressOf Me.ClearOnlySelectedCells)
End Sub

Private Function ClearOnlySelectedCells(ByVal gcMultiRow As GcMultiRow, ByVal rowIndex As Integer, ByVal cellIndex As Integer) As Boolean
    If (gcMultiRow.GetInheritedState(rowIndex, cellIndex) And MultiRowElementStates.Selected) = MultiRowElementStates.Selected Then Return True
    Return False
End Function

[C#]
using GrapeCity.Win.MultiRow;

public static class GcMultiRowExtension
{
    public static void Clear(this GcMultiRow gcMultiRow)
    {
        Clear(gcMultiRow, delegate(GcMultiRow gcMultiRow1, int rowIndex, int cellIndex)
        {
            if (!(gcMultiRow1.Template.Row[cellIndex] is HeaderCell)) return true;
            return false;
        });
    }

    public delegate bool ClearConditionHandler(GcMultiRow gcMultiRow, int rowIndex, int cellIndex);

    public static void Clear(this GcMultiRow gcMultiRow, ClearConditionHandler condition)
    {
        for (int rowIndex = 0; rowIndex < gcMultiRow.RowCount; rowIndex++)
        {
            for (int cellIndex = 0; cellIndex < gcMultiRow.Template.Row.Cells.Count; cellIndex++)
            {
                if (condition(gcMultiRow, rowIndex, cellIndex))
                {
                    gcMultiRow.SetValue(rowIndex, cellIndex, null);
                }
            }
        }
    }
}

// 呼び出し例1 : ヘッダ型セルを除くすべてのセルの値を null に設定する
this.gcMultiRow1.Clear();

// 呼び出し例2 : 選択されたセルだけ消去する
//(ヘッダはSelectableではないので自動的に除外される。
// 行ヘッダセルが選択状態の場合はセルではなく行自体が選択されている。)
this.gcMultiRow1.Clear(delegate(GcMultiRow gcMultiRow, int rowIndex, int cellIndex)
{
    if ((gcMultiRow.GetInheritedState(rowIndex, cellIndex) & MultiRowElementStates.Selected) == MultiRowElementStates.Selected) return true;
    return false;
});

行の削除と追加によってセルの値をクリアするには、次のようにコーディングします。

[Visual Basic]
Dim count As Integer = GcMultiRow1.RowCount
GcMultiRow1.Rows.Clear()
GcMultiRow1.RowCount = count

[C#]
int count = gcMultiRow1.RowCount;
gcMultiRow1.Rows.Clear();
gcMultiRow1.RowCount = count;


ユーザーがセルを選択して[Del]キーを押した場合の操作をシミュレートするには、次のようにコーディングします。

[Visual Basic]
Imports GrapeCity.Win.MultiRow

SelectionActions.SelectAll.Execute(GcMultiRow1)
EditingActions.Clear.Execute(GcMultiRow1)
GcMultiRow1.ClearSelection()
GcMultiRow1.CurrentCell.Selected = True


[C#]
using GrapeCity.Win.MultiRow;

SelectionActions.SelectAll.Execute(gcMultiRow1);
EditingActions.Clear.Execute(gcMultiRow1);
gcMultiRow1.ClearSelection();
gcMultiRow1.CurrentCell.Selected = true;