ObjectListView项目不可见?

时间:2012-01-30 20:31:45

标签: c# winforms

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

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

6 个答案:

答案 0 :(得分:3)

这可能已经过去了,因为它对原版海报有帮助,但我遇到了同样的问题并且发疯了。

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

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

答案 1 :(得分:0)

我认为您无法以ListView状态向Detail添加项目。

您可以执行以下操作:

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

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

答案 2 :(得分: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作为第三个参数传递,也会发生这种情况。

答案 3 :(得分: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);

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

答案 4 :(得分:0)

我遇到了同样的问题...原来的解决方案是通过调用RebuildColumns()在添加/删除列之后重建列:

var folv = new FastObjectListView()
{
    AllColumns = new List<OLVColumn>()
    {
        new OLVColumn("Name", "Name")
        {
            IsVisible = true,
            ShowTextInHeader = true
        }
        // Add other columns here...
    },
    HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Clickable,
    View = System.Windows.Forms.View.Details
};
folv.RebuildColumns();
// ObjectListView is now ready!

答案 5 :(得分:0)

事后的另一种回答方式,可能是为了帮助别人......

我曾经有一个课程被其他人添加到解决方案中。我的任务是在 ObjectListView 中显示该类型的项目列表。无论我在表单上尝试使用新的 OLV 做什么,我都无法显示任何内容。我打开交替行颜色以查看是否显示任何内容,并且我正在获取列表中确切有多少对象的交替行。我检查了 OLV 中的对象,并且有正确的数字。他们只是不会在 OLV 中显示任何文本。

在第 100 万次查看类后,我意识到我试图显示的属性都具有内部访问修饰符。我将它们更改为公开,并且能够显示所有内容。无论出于何种原因,有人将这两个属性only 设置为 internal,而它们最终成为我试图显示的唯一两个属性。

很明显,我一直跳过答案。该类中的所有其他属性都是公共的,所以我什至没有费心去专门检查我正在使用的那些。我所做的每一次搜索都在 SO 上提出了这个问题,所以我认为这值得分享。希望它可以帮助某人。