L'ajout ou de l'insertion d'un élément à un TListView toujours l'ajoute à la fin, quand GroupView est Active
En Delphi 2009 :
Quand TListView de GroupView est Active, l'ajout ou de l'insertion d'un élément à un TListView toujours l'ajoute à la fin de la liste, indépendamment de l'Index spécifié en tant que param. Lorsque GroupView est défini à false, il l'ajoute à l'index spécifié. Mais quand c'est vrai, ce comportement n'est pas vu.
ListView2.Items.Insert(1)
Le dessus doit insérer un élément à la sepecified indice "1", mais toujours l'ajoute à la fin de la liste. Ce que je fais mal?
object ListView2: TListView
Left = 32
Top = 40
Width = 161
Height = 233
BorderWidth = 5
Columns = <
item
AutoSize = True
end>
DoubleBuffered = False
FlatScrollBars = True
Groups = <
item
Header = 'test'
Footer = 'aksdlkajsd;flkj'
GroupID = 0
State = [lgsNormal]
HeaderAlign = taLeftJustify
FooterAlign = taLeftJustify
Subtitle = 'adgasdfasdf'
TopDescription = 'test desc'
BottomDescription = 'adsfasdfasdf'
TitleImage = 0
ExtendedImage = 0
end
item
Header = 'test1'
GroupID = 1
State = [lgsNormal]
HeaderAlign = taLeftJustify
FooterAlign = taLeftJustify
TopDescription = 'test1 desc'
TitleImage = 1
ExtendedImage = 1
end>
HideSelection = False
IconOptions.WrapText = False
Items.ItemData = {
03D80000000500000000000000FFFFFFFFFFFFFFFF0000000000000000000000
0003740077006F00FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000
086100730064006600610073006400660000000000FFFFFFFFFFFFFFFF000000
000000000000000000057400680072006500650000000000FFFFFFFFFFFFFFFF
000000000000000000000000036F006E00650000000000FFFFFFFFFFFFFFFF00
00000000000000000000001866006F0075007200320033003300330033003300
33003300330033003300330033003300330033003300330033003300}
MultiSelect = True
GroupView = True
ParentDoubleBuffered = False
ShowColumnHeaders = False
TabOrder = 0
ViewStyle = vsReport
fin
et le Code pour ajouter un élément @ index 0
procedure TForm1.Button1Click(Sender: TObject);
var
oListItem: TListItem;
begin
oListItem := ListView2.Items.Insert(0);
oListItem.Caption := 'CCCCCCCC';
oListItem.GroupID := 0;
end;
Merci & Cordialement,
Pavan.
Il y a quelque chose d'autre (voir ma réponse). Publier vos ListView propriétés et/ou votre code.
Veuillez noter que ce problème se produit lorsque ViewStyle = vsReport
Quelqu'un a trouver une solution à ce problème, après tout ? J'ai essayé toutes les réponses et ils dindn pas de travail !
Veuillez noter que ce problème se produit lorsque ViewStyle = vsReport
Quelqu'un a trouver une solution à ce problème, après tout ? J'ai essayé toutes les réponses et ils dindn pas de travail !
OriginalL'auteur Pavan | 2009-07-02
Vous devez vous connecter pour publier un commentaire.
Il peut dépendre d'autres propriétés que vous avez changé (comme SortType).
J'ai essayé avec une simple liste de texte (avec ViewStyle =vsList) et il insère à l'index spécifié que GroupView est définie ou non:
Ce problème se produit uniquement lorsque GroupView est actif et les éléments sont associés à des groupes
Vous devez définir l'ID de groupe pour l'élément à apparaître au sein d'un groupe.
OriginalL'auteur François
Vous devrez peut-être attribuer la nouvelle ListItem à un GroupIndex, en supposant que vous avez ajouté au moins 1 premier Groupe et donné un ID.
Ou vous pouvez créer le TListItem objet tout d'abord, donner le GroupID et l'utilisation ListView.Éléments.AddItem(item, index) pour ajouter à la liste.
Ce n'est pas aider. C'est le contrôle de Windows qui ignore la position.
OriginalL'auteur
J'ai rencontré ce problème en Delphi XE. Il semble être assez fondamental dans Delphi enveloppé le contrôle COM ou COM le contrôle de lui-même. Bizarrement, dans la liste des Éléments, les éléments sont dans le bon ordre, ils sont simplement affichés de manière incorrecte.
Pour résoudre ce j'ai fini par supprimer tous les éléments de la TListView et de les ajouter ensuite dans.
Ce n'est pas la meilleure solution, mais il semble fonctionner (ce code a été écrit en Delphi XE, mais devrait fonctionner dans Delphi 2009+).
OriginalL'auteur tmjac2
BeginUpdate/EndUpdate aider à éviter cela.
Ce code devrait fonctionner correctement
(Begin|End)Update()
doit être enveloppé dans untry..finally
bloc:ListView2.Items.BeginUpdate; try ... finally ListView2.Items.EndUpdate; end;
Ce n'est pas aider.
OriginalL'auteur Constantine