Я использую XE5 Update 2 на 64-разрядной версии Windows 7 (все обновления обновлены).
У меня есть приложение с простым объектом TListView.
object lsvReceipts: TListView
Left = 0
Top = 0
Width = 1382
Height = 760
Align = alClient
Columns = <
item
Caption = 'Column 1'
Width = 100
end
item
Caption = 'Column 2'
Width = 100
end
item
Caption = 'Column 3'
Width = 100
end
item
Caption = 'Column 4'
Width = 100
end>
MultiSelect = True
OwnerData = True
RowSelect = True
TabOrder = 0
ViewStyle = vsReport
OnData = lsvReceiptsData
ExplicitLeft = 136
ExplicitTop = 200
ExplicitWidth = 521
ExplicitHeight = 321
end
Вот часть кода pas. Он просто отображает данные из объекта firedac TFDQuery.
procedure TForm3.lsvReceiptsData(Sender: TObject; Item: TListItem);
var index: integer;
begin
index := Item.Index;
receiptsQuery.RecNo := index;
Item.Caption := dockReceiptsQueryDR_.AsString;
Item.SubItems.Add(receiptsQueryDOCK_RCPT_ID.AsString);
Item.SubItems.Add(receiptsQueryRCVD_DATE.AsString);
end;
Как вы можете видеть на изображении ниже, есть некоторые проблемы с перерисовкой, которые возникают, когда я выбираю несколько строк, а затем отменяю их выделение. Если я установлю для OwnerData значение false и добавлю записи в список вручную с помощью метода lsvReceipts.Items.Add, этого не произойдет.
Любые идеи о том, как избавиться от этого? Основываясь на других сообщениях, которые я видел здесь, элемент управления изобилует проблемами. К сожалению, я должен использовать его на данный момент.
И если вам интересно, мне нужен список с несколькими столбцами, где пользователь может выбрать несколько записей. Я начал с использования DBGrid с установленным параметром множественного выбора, однако после его использования функциональность для выбора нескольких строк ограничена (например, SHIFT+Click, SHIFT+PageUp/PageDown не работают). В любом случае, мы планируем перейти на сетку devexpress в будущем, но пока я должен придерживаться элементов управления vcl vanilla.
Спасибо
DoubleBuffered
в представлении списка. Если вы не можете по какой-либо причине, обратитесь к предыдущему комментарию. - person Sertac Akyuz   schedule 01.03.2014