Как установить для свойства «selected» TGrid значение -1

Я использую FMX.Grid.TGrid, в котором пользователь может выбирать полные строки. В некоторых случаях я хочу сбросить этот выбор. Если я сделаю это с помощью grid.selected = -1 или grid.selectRow(-1), выделение будет удалено из сетки, но grid.selected будет установлено на «0» (в TCustomGrid.SelectCell), что является первой строкой.

Как я могу сбросить выбор, чтобы свойство grid.selected было «-1»?


person Rynardald    schedule 21.07.2015    source источник
comment
Это просто природа сеток, всегда есть что-то выбранное в любой момент времени. То же самое в ВКЛ.   -  person Jerry Dodge    schedule 21.07.2015
comment
Ни в какое время. Во время между созданием и первым выбором ячейки свойство «выбрано» равно «-1».   -  person Rynardald    schedule 21.07.2015
comment
Ну да, пока что-то не добавлено, выбирать нечего. После добавления строки она по умолчанию равна 0. Теперь, если та же процедура, которая добавляет строку, также проверяет индекс, он может быть временно равен -1 до тех пор, пока процедура не завершится.   -  person Jerry Dodge    schedule 21.07.2015
comment
есть ли способ проверить, выделена ли строка и какая строка выделена? Поскольку выделение можно было удалить с помощью «grid.selectRow(-1)».   -  person Rynardald    schedule 21.07.2015
comment
Что вы на самом деле пытаетесь сделать? Мы только предполагаем. Например, вы можете расфокусировать сетку. Но ответ зависит от того, какая у вас цель!!!   -  person Rohit Gupta    schedule 21.07.2015
comment
Мое намерение состояло в том, чтобы проверить с помощью grid.selected = -1, выбрал ли пользователь какую-либо строку или нет. Но grid.selected автоматически устанавливается в «0», если он меньше «0», поэтому для меня это бесполезно.   -  person Rynardald    schedule 22.07.2015
comment
Вы можете просто застрять с этим - набор данных всегда будет иметь указатель для записи, сетка - это просто графическое представление этого. Если вы не будете осторожны (а если не сейчас, то при обновлении компонента), то установка внутреннего свойства на то, что дизайнеры не позволили вам установить, может иметь странные последствия. Возможно, вам просто понадобится отдельный флажок/кнопка, чтобы «отменить выбор» сетки. Вы можете упаковать это в фрейм/новый элемент управления, если это необходимо.   -  person Matt Allwood    schedule 22.07.2015


Ответы (2)


Я проверил код библиотеки FMX. Я сделал крошечный помощник класса, который позволяет вам получить прямой доступ к частному свойству, которое хранит значение выбранной строки. Проверено на Delphi XE8. Этот код будет работать корректно, даже если у вас включена опция «AlwaysShowSelection».

  TMyG = class helper for TCustomGrid
  public
    procedure DoSomethingStrange;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.btnReadSelectionClick(Sender: TObject);
begin
  Caption := Grid1.Selected.ToString;
end;

procedure TForm1.btnResetSelectionClick(Sender: TObject);
begin
  Grid1.DoSomethingStrange;
end;

{ TMyG }

procedure TMyG.DoSomethingStrange;
begin
  Self.FSelected := -1;
  Self.UpdateSelection;
end;
person Zam    schedule 21.07.2015

Если ваша цель состоит в том, чтобы не отображать выбранную строку в сетке, вы можете просто расфокусировать ее, сосредоточив внимание на другом компоненте.

person Rohit Gupta    schedule 21.07.2015
comment
grid.selected не будет -1 - person Zam; 21.07.2015