ObjectListView项目不可见?

问题描述 投票:1回答:4

出于某种原因,我无法在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(),但任何结果......

没有人知道这个?顺便说一句,这些项目肯定是添加的。当我选择第一行时,我得到一个选择框,只是没有可见文本。

c# winforms
4个回答
2
投票

这可能是过去,当它对原始海报有所帮助,但我有同样的问题,并且发疯了。

您需要在何处放置列的名称(用于构建列数据的对象的公共属性)不在NAME字段中,而不在TEXT字段中。虽然渲染控件只是列标题和空行,但我也可以在ObjectListView控件中看到数据行。任何无效,刷新或其他操作都无法在呈现的表单上生成数据。

所以...发现如果你把名字放在AspectName上的Columns Collection字段中,通过IDE的Columns Collection Editor,那么瞧......这些数据显示在控件中!可能有一种方法可以通过一个程序来实现,但我将其留给下一个人,因为它现在正在做我需要的。


0
投票

我认为事情是你不能以这种方式向ListView州的Detail添加物品。

您可以执行以下操作:

使用ListViewItem.SubItems属性ad“col2”和“col3”到“col1”的每个子项

在链接中,您可以看到一个示例,您如何做到这一点。


0
投票

也不太可能帮助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作为第三个参数传递,也会发生这种情况。


0
投票

这是另一个警告。

如果要将tabListView动态添加到tabControl中的动态创建选项卡,则会看到问题中解释的行为。

解决方案是选择新创建的选项卡,然后创建ObjectListView并将其添加到选项卡页面。

ctrlTabLogFiles.TabPages.Add(key, name);
var tab = ctrlTabLogFiles.TabPages[key];
ctrlTabLogFiles.SelectedTab = tab;
var gridCtrl = new GridWrapperControl();
tab.Controls.Add(gridCtrl);

在此之后,您可以像以前一样添加标题和数据。

© www.soinside.com 2019 - 2024. All rights reserved.