2009-07-02 16 views
3

アクティブであるときは、常に最後に追加します:GroupViewは、Delphi 2009年に

TListViewののGroupViewはいつもの末尾に追加します追加またはTListViewのにアイテムを挿入し、アクティブでありますparamとして指定されたIndexに関係なく、リスト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; 

おかげ&よろしく、 Pavanを項目を追加します。

+0

私の答えをご覧ください。 ListViewのプロパティやコードを投稿します。 –

+0

この問題は、ViewStyle = vsReportの場合に発生します。 – Pavan

答えて

0

少なくとも1つのグループを最初に追加し、それにIDを与えたと仮定して、新しいListItemをGroupIndexに割り当てる必要があるかもしれません。

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

それとも、最初TListItemのオブジェクトを作成し、それをグループIDを与えるとリストビューに追加し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

私は、Delphi XEでこの問題に遭遇しました。これは、DelphiがCOMコントロールまたはCOMコントロール自体を包み込む方法のかなり基本的なようです。奇妙なことに、アイテムリストにアイテムが正しい順序で表示されているだけで、正しく表示されません。私はTListViewの外のすべての項目を削除してからバックでそれらを追加することになった。この問題を解決するには

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; 

これが最善の解決策ではないですが、それは動作するようです(このコードはでした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;最後; –

関連する問題