SPREAD for WPF 4.0J - GcSpreadSheet
ボタン型セル
MESCIUS SPREAD for WPF 4.0J - GcSpreadSheet > 開発者ガイド > セル型 > ボタン型セル

ボタン型セルはセルにボタンを表示します。ButtonCellType クラスを使用して設定します。主な設定は次のとおりです。

デザイナを使用した設定方法については、「デザイナのダイアログ」をご覧ください。

表示内容

次の図のようにボタンにテキストを表示する場合、Content プロパティを使用します。

ボタン型セル(テキスト)

サンプルコード
C#
コードのコピー
ButtonCellType btn = new ButtonCellType();
btn.Content = "ボタン";
GcSpreadSheet.Workbook.ActiveSheet.Columns[0].CellType = btn;
GcSpreadSheet.Workbook.ActiveSheet.Columns[0].ColumnWidth = 160;                

Visual Basic
コードのコピー
Dim btn As ButtonCellType = New ButtonCellType()
btn.Content = "ボタン"
GcSpreadSheet.Workbook.ActiveSheet.Columns(0).CellType = btn
GcSpreadSheet.Workbook.ActiveSheet.Columns(0).ColumnWidth = 160        

次の図のようにボタンにテキスト以外の内容を表示する場合、ContentTemplate プロパティにデータ テンプレートを設定します。

ボタン型セル(テンプレート)

サンプルコード
XAML
コードのコピー
<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>                

コマンド

ユーザーがボタンを押したときの処理は WPF のコマンドに実装します。実行時、コマンド パラメータにはボタンが押されたセルの情報を保存した CellCommandParameter が自動的に設定されます。そのため、開発者は CellCommandParameter の情報を使用してコマンドを実装できます。CellCommandParameter に設定される情報は次のとおりです。

CommandParameter の情報
プロパティ 説明
Column クリックされるボタンの列を取得します。
Row クリックされるボタンの行を取得します。
CustomCommandParameter コマンドに渡すパラメーターを取得または設定します。
Worksheet クリックされるボタンのワークシートを取得します。

次のサンプルコードは、ボタンが押された行を削除する処理を MyDeleteCommand クラスに実装します。

サンプルコード
C#
コードのコピー
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;                

C#
コードのコピー
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));
            }
        }
    }

Visual Basic
コードのコピー
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 = 15                

Visual Basic
コードのコピー
Friend 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