WinForms列表视图不以详细视图显示项目

15

我卡住了....

这是我用来向我的列表视图添加项目的代码:

ListViewItem item = new ListViewItem(ProjectDomainName);
item.Tag = relatedProject.ProjectId;
lvwSelectedProjects.Items.Add(item);
当我选择'View.List'作为视图模式时,我可以看到所有的项目。当我选择'View.Details'(这是我想要的设置)时,我什么也看不到。嗯,什么也没有,我确实得到了一个垂直滚动条,但没有项目。而且我可以滚动,但没有项目。我还在列表视图中添加了一列(没有更改添加项目的代码),但也没有起作用。我一定是忽略了什么?

1
我认为你需要提供更多的细节。你提供的代码用于向列表视图添加项目没有问题,但是我不确定的是“View.Details”。什么是“View”和“Details”?我不确定你想要实现什么... - David Masters
View.ListView.Details 是 listview 的 View 属性的值:lvwAvailableProjects.View = View.Details; - Michel
5个回答

15

这段代码对我有效:

using System;
using System.Windows.Forms;

public class LVTest : Form {
    public LVTest() {
        ListView lv = new ListView();
        lv.Columns.Add("Header", 100);
        lv.Columns.Add("Details", 100);
        lv.Dock = DockStyle.Fill;
        lv.Items.Add(new ListViewItem(new string[] { "Alpha", "Some details" }));
        lv.Items.Add(new ListViewItem(new string[] { "Bravo", "More details" }));
        lv.View = View.Details;
        Controls.Add(lv);
    }
}

public static class Program {
    [STAThread] public static void Main() {
        Application.Run(new LVTest());
    }
}

在一个空项目中尝试这段代码。然后,专注于将其适应到您的应用程序中:比较您的程序与此代码的不同之处,并努力将其更改为更接近我的。如果您的程序失去了一些功能,那没关系;只要尽量让基本版本工作即可。然后,逐步添加功能,以便确保程序每一步都能正常运行。

如果您仍然卡住了,请发布来自您的项目的更多代码,那么我们可能会更好地了解您遇到问题的原因。


20
谢谢,这让我朝正确的方向前进了。问题是什么?每次重新加载带有新数据的列表视图,并且我使用lvw.Clear()来清除列表,但这也清除了列,因此在详细模式下不显示任何项目。必须使用lvw.Items.Clear()。 - Michel
5
谢谢你的解决方案。请使用 lv.Items.Clear() 而不是 lv.Clear()。 - Chris Walsh

3
当listview.View = View.Details时,空项目未显示的另一个可能原因是您未向listview添加任何列。例如:
ListView lv = new ListView();
lv.View = View.Details;
lv.Items.Add("Test");

如果不添加列,将导致空的ListView。
添加列将会纠正问题:

...
lv.View = View.Details;
// Add one auto-sized column, to show Text field of each item.
lv.Columns.Add("YourColumnTitle", -2);
...

0

因为,你应该使用ListViewDataItem而不是ListViewItem,请注意...

        for (int i = 0; i < AudioCdWriter.FileCount; ++i) {
            var item = new ListViewDataItem(i.ToString());
            item.SubItems.Add(AudioCdWriter.TrackLength((short)i).ToString());
            item.SubItems.Add(AudioCdWriter.file[(short)i]);
            lvwAudioFiles.Items.Add(item);
        }

在什么情况下应该使用 ListViewDataItem 而不是 ListViewItem - ToolmakerSteve

-1
这也发生在我身上(详细视图中未显示项目列表),我只需在向列表视图添加项目后将以下内容放入代码中(之前仅在设计中)即可开始显示项目。
lv.View = View.Details;

顺便说一句:我没有将其投票否决,但是没有更多的信息,不清楚 你最初做错了什么,以至于这样“修复”它。如果列表视图已经处于详细视图中(在设计器中设置),则添加此行应该没有影响。这是“魔法咒语”-你不知道为什么它有帮助,或者什么时候会有帮助。弄清楚最初的问题会有所帮助。例如,也许需要刷新视图,因此“直接”的答案应该是“Invalidate(); Update();”,然后这才会触发实际所需的东西 - ToolmakerSteve

-1
ListViewItem item = new ListViewItem("item1");
item.SubItems.Add("subitem"); //add subitem if applicable
listview1.Items.Add(item);

这个结果可以解决你的问题


1
在我看来,这并没有为讨论增加任何价值。 - Michel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接