19. april 2008 - 00:37Der er
4 kommentarer og 1 løsning
Hvilken komponent - evt. hjælp til StringGrid
Jeg skal på en form vise en række data fordelt i 3 kolonner.
Første kolonne er tallene fra 1-20. Anden kolonne er nogle intervaller, jeg har angivet i forrige skærmbillede Tredje kolonne er nogle resultater Beregnet ud fra intervallerne angivet i forrige skærmbillede.
Spørgsmålet er nu, hvilken komponent, der vil være mest velegnet. Det skal være read-only. Jeg havde tænkt mig en StringGrid, men synes ikke, at jeg kan komme af med, at man kan "markere" i den.
Vil i alligevel foreslå en StringGrid har i så en løsning til nævnte problem med denne?
Hvis du ikke kender den er kan det lette lidt at vide at du skal sætte den i report-mode og at et TListItem er nedarvet fra TCollectionItem. Det betyder at for at lave en linje skriver du:
ListItem := TListView1.Items.Add; ListItem.Caption := 'Hello'; // Første kolonne ListItem.SubItems.Add('world'); // Anden kolonne
Hvis du har et objekt du gerne vil have koblet på linjen har TListItem også en bekvem .Data property.
ListItem.Data := MyObject;
Det er meget almindeligt at koble objektet på så man ikke skal lede efter det når der klikkes på linjen. I TListView.OnSelectedItem kan man hente det direkte i Item.Data
Hvis det er mange records der skal i listen skal du huske følgende:
var ListItem: TListItem; begin ListItem1.Items.BeginUpdate; try ListItem1.Items.Clear; for i := 0 to Count - 1 do begin ListItem := ListItem1.Items.Add; ListItem.Caption ... end; finally ListView1.Items.EndUpdate; end; end;
Men, hvis mange records er rigtig mange - for et TListView er det allerede > 2000 - er det smartere at bruge en virtuel liste da ydelsen bliver ret dårlig. Jeg har beskrevet det andetsteds. Er det situationen skal jeg gerne hjælpe med at finde indslaget.
Med foelgende kode fjerner du markeringen i en StringGrid: StringGrid1.Selection := TGridRect(Rect(-1,-1,-1,-1));
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.