ディーバ Blog

大阪発 C#の会社、株式会社ディーバの Blog です。

Xamarin.Android SfDataGrid で編集時にキーボードの種類を変える

Syncfusion SfDataGrid で編集する際にキーボードの種類(InputType)を変更する方法です。

※ この記事の投稿時点の SfDataGrid のバージョンは v15.2.0.46 です。

f:id:jz5_diva:20170722010425j:plain

Editing 機能で Excel のセルのように編集できます。キーボードの種類を指定するには、カスタム GridCellTextViewRenderer クラスを使います。

セルに入力できる値を制限をする場合、Column Types の GridNumericColumn 等も使えます。

public class GridCellTextViewRendererExt : GridCellTextViewRenderer
{
    protected override void OnEnteredEditMode(DataColumnBase dataColumn, View currentRendererElement)
    {
        base.OnEnteredEditMode(dataColumn, currentRendererElement);

        // MappingName により分岐させる場合は次のように参照
        if (dataColumn.GridColumn.MappingName != "ProductNo") return;
        
        // 行のデータにより分岐させる場合は次のように RowData を参照
        // var item = dataColumn.RowData as MyViewModel;

        var editText = currentRendererElement as EditText;
        if (editText == null) return;

        // InputTypes を変更
        editText.InputType = InputTypes.ClassNumber;
    }
}

作成したカスタムレンダラーに差し替えます。

_dataGrid = new SfDataGrid(this);

// Add custom renderer    
_dataGrid.CellRenderers.Remove("TextView");
_dataGrid.CellRenderers.Add("TextView", new GridCellTextViewRendererExt());