2011-07-05 5 views
1

1つの列を持つ詳細モードのユーザーコントロールにListViewがあります。私はデザイナーを介してアイテムを追加し、それは正常に表示されます。しかし、私がプログラムで追加するものは、リストには表示されません。 ListView.Items.Countプロパティは正しいですが。UserControlのListViewにプログラムによって追加されたListViewItemsが見えないのですか?

追加コードとリストビューをメインフォームにコピーしましたが、すべて表示されます。

// user control 
public void AddFiles(IEnumerable<string> files) 
{ 
    // this doesn't work - list view doesn't show any new files 
    ListViewItem[] items = files.Select(file => new ListViewItem(file)).ToArray(); 
    listView1.Items.AddRange(items); 
} 

// main form 
private void AddFiles(IEnumerable<string> files) 
{ 
    // call to the user control 
    fileList.AddFiles(files); 

    // test code works correctly - can see the added files in the list view 
    ListViewItem[] items = files.Select(file => new ListViewItem(file)).ToArray(); 
    listView1.Items.AddRange(items); 
} 

答えて

0

次のように私は、ユーザーコントロールと同様の機能を持っている:私は見

using ListViewCollection = System.Windows.Forms.ListView.ListViewItemCollection; 

void FillDirectories () 
{ 
    IEnumerable<DirectoryInfo> pathDirInfos = currentPath.EnumerateDirectories (); 

    var dirItems = (from d in pathDirInfos 
        select new ListViewItem 
        { 
         Name = d.Name, 
         Text = d.Name, 
        }) 
        .ToArray (); 

    ListViewCollection listItems = new ListViewCollection (uxExplorerListView); 
    listItems.AddRange (dirItems); 
} 

唯一の違いは、私は、コンストラクタに所有ListView制御を渡しListView.ListViewItemCollecitonを作成していますということです。

0

プログラマチックに行う場合、最初に少なくとも1つの列を作成する必要があります。

関連する問題