2009-07-02 4 views
3

활성화되면 항상 마지막에 추가 :GroupView 델파이 2009 년

뷰 TListView의 GroupView 항상의 말미에 추가 추가하거나 뷰 TListView에 항목을 삽입, 활성입니다 param로서 지정된 인덱스에 관계없이리스트 GroupView를 false로 설정하면 지정된 인덱스에 GroupView가 추가됩니다. 그러나 그것이 사실 일 때,이 행동은 보이지 않습니다.

ListView2.Items.Insert(1) 

위의 항목은 지정된 색인 "1"에 항목을 삽입해야하지만 항상 목록의 끝에 추가해야합니다. 여기서 내가 뭘 잘못하고 있니?

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 

및 코드는 0

procedure TForm1.Button1Click(Sender: TObject); 
var 
    oListItem: TListItem; 
begin 
    oListItem := ListView2.Items.Insert(0); 
    oListItem.Caption := 'CCCCCCCC'; 
    oListItem.GroupID := 0; 
end; 

감사를 인덱스 @ & 안부, 파반를 항목을 추가 할 수 있습니다.

+0

내 대답을 참조하십시오. ListView 속성 및/또는 코드를 게시하십시오. –

+0

ViewStyle = vsReport 인 경우이 문제가 발생합니다. – Pavan

답변

0

적어도 하나의 그룹을 추가하고 ID를 부여 받았다고 가정하면 새 ListItem을 GroupIndex에 할당해야 할 수 있습니다.

var 
    item: TListItem; 
begin 
    item:= ListView.Items.Add; 
    item.GroupID=0; 
end; 

이 아니면 먼저 TListItem 개체를 만들고 그것에게 그룹 ID를주고있는 ListView에 추가 ListView.Items.AddItem (항목, 인덱스)를 사용할 수 있습니다.

+0

그룹이 필요하지 않습니다. 내 답변을 참조하십시오, 그것은 그룹없이 작동합니다. –

1

변경 한 다른 속성 (예 : SortType)에 따라 달라질 수 있습니다.
나는 (ViewStyle = vsList과) 간단한 텍스트 목록을 시도하고 GroupView 거세한 숫양 지정된 인덱스가 설정되지 않았거나에 삽입 :

object ListView1: TListView 
    Left = 24 
    Top = 16 
    Width = 250 
    Height = 150 
    Columns = <> 
    Items.ItemData = { 
     03480000000200000000000000FFFFFFFFFFFFFFFF00000000FFFFFFFF000000 
     00057400650073007400310000000000FFFFFFFFFFFFFFFF00000000FFFFFFFF 
     000000000574006500730074003200} 
    GroupView = True 
    TabOrder = 0 
    ViewStyle = vsList 
    end 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    ListView1.Items.Insert(1).Caption := Edit1.Text; 
end; 
+0

ViewStyle = vsReport 일 때 작동하지 않는 것 같습니다. 지정된 인덱스에 삽입하려면 ViewStyles를 앞뒤로 전환해야합니까? – Pavan

+0

이 문제는 GroupView가 활성화되어 있고 항목이 그룹에 연결되어있을 때만 발생합니다. – Pavan

0

내가 델파이 XE에서이 문제에 달렸다. 델파이가 COM 컨트롤이나 COM 컨트롤 자체를 감싸는 방식에서 꽤 근본적으로 보입니다. 이상하게도 항목 목록에서 항목의 순서가 정확하며 잘못 표시됩니다.

이 최고의 해결책이 아니다

procedure RefreshListView(const ListView: TListView); 
    var ListItem : TListItem; 
     List : TList<TPair<String,Boolean>>; 
     Pair : TPair<String,Boolean>; 
begin 
    List := TList<TPair<string,Boolean>>.Create; 
    try 
    ListView.Items.BeginUpdate; 
    try 
     //To get the sorting to work right in the listview with GridView and vsReport 
     //You have to rebuild the list completely 
     for ListItem in ListView.Items do 
     begin 
     List.Add(TPair<String,Boolean>.Create(ListItem.Caption,ListItem.Selected)); 
     end; 

     ListView.Items.Clear; 

     for Pair in List do 
     begin 
     with ListView.Items.Add do 
     begin 
      Caption := Pair.Key; 
      Selected := Pair.Value; 
     end; 
     end; 
    finally 
     ListView.Items.EndUpdate; 
    end; 
    finally 
    List.Free; 
    end; 
end; 

. 내가 다시에 추가 한 다음 뷰 TListView에서 모든 항목을 삭제하고 결국이 문제를 해결하려면,하지만 작동하는 것 같다 (이 코드이었다 Delphi XE로 작성되었지만 Delphi 2009 이상에서 작동해야 함).

0

BeginUpdate/EndUpdate 도움을 받으려면 여기를 클릭하십시오. 이 코드는 제대로 작동합니다.

procedure TForm1.Button1Click(Sender: TObject); 
var 
    oListItem: TListItem; 
begin 
ListView2.Items.BeginUpdate; 
oListItem := ListView2.Items.Insert(0); 
oListItem.Caption := 'CCCCCCCC'; 
oListItem.GroupID := 0; 
ListView2.Items.EndUpdate; 
end; 
+0

'(Begin | End) Update()'를 try..finally 블록으로 래핑해야합니다 : ListView2.Items.BeginUpdate; try ... finally ListView2.Items.EndUpdate; 끝; –

관련 문제