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

文書番号 : 34423     文書種別 : 使用方法     登録日 : 2012/11/21     最終更新日 : 2012/11/21
文書を印刷する
対象製品
MultiRow for Windows Forms 7.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;