onGridSelectionModeChanged method

  1. @override
void onGridSelectionModeChanged()
override

Called when the SfDataGrid.selectionMode is changed at run time.

Implementation

@override
void onGridSelectionModeChanged() {
  final DataGridConfiguration dataGridConfiguration =
      _dataGridStateDetails!();
  if (dataGridConfiguration.selectionMode == SelectionMode.none) {
    dataGridConfiguration.headerCheckboxState = false;
    _clearSelectedRows(dataGridConfiguration);
    _pressedRowColumnIndex = RowColumnIndex(-1, -1);
  } else if (dataGridConfiguration.selectionMode != SelectionMode.none &&
      dataGridConfiguration.selectionMode != SelectionMode.multiple) {
    DataGridRow? lastRecord = dataGridConfiguration.controller.selectedRow;
    _clearSelection(dataGridConfiguration);
    if (dataGridConfiguration.navigationMode == GridNavigationMode.cell &&
        lastRecord != null) {
      final RowColumnIndex currentRowColumnIndex =
          _getRowColumnIndexOnModeChanged(dataGridConfiguration, lastRecord);

      if (currentRowColumnIndex.rowIndex <= 0) {
        return;
      }

      lastRecord = dataGridConfiguration.selectionMode == SelectionMode.single
          ? selection_helper.getRecord(
              dataGridConfiguration,
              grid_helper.resolveToRecordIndex(
                  dataGridConfiguration, currentRowColumnIndex.rowIndex))
          : lastRecord;

      dataGridConfiguration.currentCell._moveCurrentCellTo(
          dataGridConfiguration,
          RowColumnIndex(currentRowColumnIndex.rowIndex,
              currentRowColumnIndex.columnIndex),
          isSelectionChanged: true);
    }

    if (lastRecord != null) {
      _addSelection(lastRecord, dataGridConfiguration);
    }
  } else if (dataGridConfiguration.isDesktop &&
      dataGridConfiguration.selectionMode == SelectionMode.multiple) {
    final RowColumnIndex currentRowColumnIndex =
        RowColumnIndex(dataGridConfiguration.currentCell.rowIndex, -1);
    dataGridConfiguration.currentCell._updateBorderForMultipleSelection(
        dataGridConfiguration,
        nextRowColumnIndex: currentRowColumnIndex);
  }
}