所以,我有一个列表视图,如问题标题所示。我已经设置了两个列: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();
所以,这一切都适用于大图标视图等:
但是,它在详情视图中分解:
列表中有 个项目(有一个滚动条)。如果您在红色箭头(在油漆中添加)下方的列中大致单击,您将选择一个项目(右上方区域是图像预览),但您将看不到任何选定内容。
总之,我做错了什么?
答案 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模式。