出于某种原因,我无法在ObjectListView中显示任何项目。我创建了一个ObjectListView,将视图设置为“Details”并添加了三列,每列都有文本和标题。然后我使用此代码(尝试)添加项目:
List<string[]> list = new List<string[]>();
list.Add(new string[] { "col1", "col2", "col3" });
list.Add(new string[] { "col1", "col2", "col3" });
releases_ListView.AddObjects(list);
当我尝试releases_ListView.Items.Count
时,我得到'2',因此项目被添加到集合中,但由于某种原因,控件本身仍然是空的。我也玩过启用/禁用排序/分组并使用Refresh()
或Update()
,但任何结果......
没有人知道这个?顺便说一句,这些项目肯定是添加的。当我选择第一行时,我得到一个选择框,只是没有可见文本。
这可能是过去,当它对原始海报有所帮助,但我有同样的问题,并且发疯了。
您需要在何处放置列的名称(用于构建列数据的对象的公共属性)不在NAME
字段中,而不在TEXT
字段中。虽然渲染控件只是列标题和空行,但我也可以在ObjectListView
控件中看到数据行。任何无效,刷新或其他操作都无法在呈现的表单上生成数据。
所以...发现如果你把名字放在AspectName
上的Columns Collection
字段中,通过IDE的Columns Collection Editor
,那么瞧......这些数据显示在控件中!可能有一种方法可以通过一个程序来实现,但我将其留给下一个人,因为它现在正在做我需要的。
我认为事情是你不能以这种方式向ListView
州的Detail
添加物品。
您可以执行以下操作:
使用ListViewItem.SubItems属性ad“col2”和“col3”到“col1”的每个子项
在链接中,您可以看到一个示例,您如何做到这一点。
也不太可能帮助OP,但另一个帖子为未来的路人:
我已经找到了以编程方式执行此操作的最佳方法是使用模型类上的OLVColumn属性。
例如,参加以下课程:
public class ModelClass
{
[OLVColumn(isVisible=false)]
public string Id {get;set;}
[OLVColumn()]
public string Name {get;set;}
[OLVColumn()]
public string Email {get;set;}
}
当使用以下代码行通过表单/视图生成列时,标记有OLVColumn()属性的任何属性都将作为列添加。
Generator.GenerateColumns(this.objectListView1,typeof(ModelClass));
您还可以使用此语句为该类的每个属性生成一个列:
Generator.GenerateColumns(this.objectListView1, typeof(ModelClass), true);
OP的原始行为 - 当项集合包含项目时,ObjectListView中没有显示任何内容 - 是由于ObjectListView在设计时没有使用AspectName作为ToniMarieM声明分配任何列,或者如果您使用的话未能包含OLVColumn属性发电机。如果您使用第二个生成器示例并将false作为第三个参数传递,也会发生这种情况。
这是另一个警告。
如果要将tabListView动态添加到tabControl中的动态创建选项卡,则会看到问题中解释的行为。
解决方案是选择新创建的选项卡,然后创建ObjectListView并将其添加到选项卡页面。
ctrlTabLogFiles.TabPages.Add(key, name);
var tab = ctrlTabLogFiles.TabPages[key];
ctrlTabLogFiles.SelectedTab = tab;
var gridCtrl = new GridWrapperControl();
tab.Controls.Add(gridCtrl);
在此之后,您可以像以前一样添加标题和数据。