[]
ボタン型セルはセルにボタンを表示します。ButtonCellType クラスを使用して設定します。主な設定は次のとおりです。
!type=note
メモ:デザイナを使用した設定方法については、「デザイナのダイアログ」をご覧ください。
次の図のようにボタンにテキストを表示する場合、Content プロパティを使用します。

サンプルコード
ButtonCellType btn = new ButtonCellType();
btn.Content = "ボタン";
GcSpreadSheet.Workbook.ActiveSheet.Columns[0].CellType = btn;
GcSpreadSheet.Workbook.ActiveSheet.Columns[0].ColumnWidth = 160;Dim btn As ButtonCellType = New ButtonCellType()
btn.Content = "ボタン"
GcSpreadSheet.Workbook.ActiveSheet.Columns(0).CellType = btn
GcSpreadSheet.Workbook.ActiveSheet.Columns(0).ColumnWidth = 160次の図のようにボタンにテキスト以外の内容を表示する場合、ContentTemplate プロパティにデータ テンプレートを設定します。

サンプルコード
<gss:GcSpreadSheet x:Name="GcSpreadSheet" Grid.Row="1" Margin="0,0,850,519">
<gss:GcSpreadSheet.Resources>
<DataTemplate x:Key="MyContent">
<Path Stretch="Uniform" Fill="#FF000000" Data="F1 M 173.354,624.292L 173.354,594.078L 188.461,609.185M 177.738,583.325C 163.457,583.325 151.88,594.902 151.88,609.185C 151.88,623.468 163.457,635.044 177.738,635.044C 192.021,635.044 203.598,623.468 203.598,609.185C 203.598,594.902 192.021,583.325 177.738,583.325 Z "/>
</DataTemplate>
</gss:GcSpreadSheet.Resources>
<gss:GcSpreadSheet.Sheets>
<gss:SheetInfo RowCount="10" ColumnCount="5">
<gss:SheetInfo.Columns>
<gss:ColumnInfo>
<gss:ColumnInfo.CellType>
<gss_CellType:ButtonCellType ContentTemplate="{StaticResource MyContent}" />
</gss:ColumnInfo.CellType>
</gss:ColumnInfo>
</gss:SheetInfo.Columns>
</gss:SheetInfo>
</gss:GcSpreadSheet.Sheets>
</gss:GcSpreadSheet>!type=note
メモ:
セル型をXAMLで使用するには、次のような名前空間を宣言します。
xmlns:gss_CellType="clr-namespace:GrapeCity.Wpf.SpreadSheet.CellType;assembly=GrapeCity.Wpf.SpreadSheet.CellType"ButtonCellType クラスの Content プロパティにコントロールなど WPF の UI 要素を設定することはできません。UI 要素を設定する場合は ContentTemplate プロパティを使用してください。
ユーザーがボタンを押したときの処理は WPF のコマンドに実装します。実行時、コマンド パラメータにはボタンが押されたセルの情報を保存した CellCommandParameter が自動的に設定されます。そのため、開発者は CellCommandParameter の情報を使用してコマンドを実装できます。CellCommandParameter に設定される情報は次のとおりです。
CommandParameter の情報
プロパティ | 説明 |
|---|---|
クリックされるボタンの列を取得します。 | |
クリックされるボタンの行を取得します。 | |
コマンドに渡すパラメーターを取得または設定します。 | |
クリックされるボタンのワークシートを取得します。 |
次のサンプルコードは、ボタンが押された行を削除する処理を MyDeleteCommand クラスに実装します。
サンプルコード
ButtonCellType btn = new ButtonCellType();
btn.Content = "削除";
btn.Command = new MyDeleteCommand(GcSpreadSheet);
btn.CustomCommandParameter = "Deleted";
GcSpreadSheet.Workbook.ActiveSheet.Columns[0].CellType = btn;
GcSpreadSheet.Workbook.ActiveSheet.Columns[0].ColumnWidth = 100;
GcSpreadSheet.Workbook.ActiveSheet.RowCount = 15;internal class MyDeleteCommand : ICommand
{
private GcSpreadSheet GcSpreadSheet;
public MyDeleteCommand(GcSpreadSheet GcSpreadSheet)
{
this.GcSpreadSheet = GcSpreadSheet;
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
}
public void OnCanExecuteChanged()
{
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
}
public void Execute(object parameter)
{
if (parameter is CellCommandParameter cellCommandParameter)
{
GcSpreadSheet.Workbook.ActiveSheet.RemoveRows(cellCommandParameter.Row, 1);
MessageBox.Show(string.Format("Row {0} '{2}'", cellCommandParameter.Row, null, cellCommandParameter.CustomCommandParameter));
}
}
}Dim btn As ButtonCellType = New ButtonCellType()
btn.Content = "削除"
btn.Command = New MyDeleteCommand(GcSpreadSheet)
btn.CustomCommandParameter = "Deleted"
GcSpreadSheet.Workbook.ActiveSheet.Columns(0).CellType = btn
GcSpreadSheet.Workbook.ActiveSheet.Columns(0).ColumnWidth = 100
GcSpreadSheet.Workbook.ActiveSheet.RowCount = 15Friend Class MyDeleteCommand
Inherits ICommand
Private GcSpreadSheet As GcSpreadSheet
Public Sub New(ByVal GcSpreadSheet As GcSpreadSheet)
Me.GcSpreadSheet = GcSpreadSheet
End Sub
Public Event CanExecuteChanged As EventHandler
Public Function CanExecute(ByVal parameter As Object) As Boolean
Return True
End Function
Public Sub OnCanExecuteChanged()
CanExecuteChanged?.Invoke(Me, EventArgs.Empty)
End Sub
Public Sub Execute(ByVal parameter As Object)
Dim cellCommandParameter As CellCommandParameter = Nothing
If CSharpImpl.__Assign(cellCommandParameter, TryCast(parameter, CellCommandParameter)) IsNot Nothing Then
GcSpreadSheet.Workbook.ActiveSheet.RemoveRows(cellCommandParameter.Row, 1)
MessageBox.Show(String.Format("Row {0} '{2}'", cellCommandParameter.Row, Nothing, cellCommandParameter.CustomCommandParameter))
End If
End Sub
End Class