为什么我的ListView没有正确显示详细信息视图?

时间:2011-02-26 16:31:11

标签: c# .net winforms listview

所以,我有一个列表视图,如问题标题所示。我已经设置了两个列:Name和Date Modified。这些是在设计器中添加的,这是设计者发出的代码供参考:

// lstFiles
this.lstFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.clmName,
this.clmDate});
// ...

// clmName
this.clmName.Text = "Name";
this.clmName.Width = 105;

// clmDate
this.clmDate.Text = "Modified";
this.clmDate.Width = 128;

在设计师中,这看起来很漂亮。

列表项本身是ListViewItem的一个小子类,只是从文件中提取一些元数据(在这种情况下,修改日期),并向自己添加一个子项:

class GalleryItem : ListViewItem {
    public string File;
    public DateTime DateModified;

    public GalleryItem(string file) : base(Path.GetFileNameWithoutExtension(file)) {
        this.ImageKey = Path.GetExtension(file);
        File = file;
        DateModified = System.IO.File.GetLastWriteTime(file);

        this.SubItems.Add(DateModified.ToString());
    }
}

要将项目添加到列表中,我只需执行此操作:

lstFiles.BeginUpdate();
lstFiles.Clear();

foreach (String f in files) {
    ListViewItem lvi = new GalleryItem(f);
    lvi.Group = lstFiles.Groups["grpFiles"]; //this varries

    //omitted: check/add icon to list 

    lstFiles.Items.Add(lvi);
}

lstFiles.EndUpdate();

所以,这一切都适用于大图标视图等:

Large Icon View

但是,它在详情视图中分解:

Details View

列表中有 个项目(有一个滚动条)。如果您在红色箭头(在油漆中添加)下方的列中大致单击,您将选择一个项目(右上方区域是图像预览),但您将看不到任何选定内容。

总之,我做错了什么?

3 个答案:

答案 0 :(得分:7)

我刚刚试了一个样本来测试一下:

using System;
using System.Windows.Forms;

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        var G1 = new ListViewGroup("Group 1");
        var G2 = new ListViewGroup("Group 2");

        Application.Run(new Form {
            Controls = {
                new ListView  {
                    Dock = DockStyle.Fill,
                    Groups = { G1, G2 },
                    View = View.Details,
                    //Columns = { "First", "Second" },
                    Items = {
                        new ListViewItem { Text = "One", Group = G1, SubItems = { "1" } },
                        new ListViewItem { Text = "Two", Group = G2, SubItems = { "2" } },
                        new ListViewItem { Text = "Three", Group = G2, SubItems = { "3" } },
                    },
                },
            },
        });
    }
}

你会发现它重复了这个问题。如果取消注释创建列的行,它将起作用。这表明您的列不存在。

在输入时,答案突然出现在我脑海中:

您正在调用ListView.Clear而不是ListView.Items.Clear,因此您要删除代码中的列。

答案 1 :(得分:0)

我的理解是您无法在“详细信息”视图中使用“组”。我现在无法测试,所以我要直接记忆。但是,尝试在没有组的情况下填充列表,看看会发生什么。我强烈怀疑这是造成问题的集团部分。

答案 2 :(得分:0)

我有完全相同的Tergiver问题,但还有一个问题 - 当你添加列时,ListView必须处于View.Details模式。