[]
        
(Showing Draft Content)

ボタン型セル

ボタン型セルはセルにボタンを表示します。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 の情報

プロパティ

説明

Column

クリックされるボタンの列を取得します。

Row

クリックされるボタンの行を取得します。

CustomCommandParameter

コマンドに渡すパラメーターを取得または設定します。

Worksheet

クリックされるボタンのワークシートを取得します。

次のサンプルコードは、ボタンが押された行を削除する処理を 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 = 15
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