由于某种原因,我无法在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()
,但任何结果......
没有人知道这个?顺便说一句,这些项目肯定是添加的。当我选择第一行时,我得到一个选择框,只有没有可见文本。
答案 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 上提出了这个问题,所以我认为这值得分享。希望它可以帮助某人。