C# 在ObjectListView C中生成列#
在普通的ListView中,我通常会动态生成列,如下所示:C# 在ObjectListView C中生成列#,c#,objectlistview,C#,Objectlistview,在普通的ListView中,我通常会动态生成列,如下所示: var list = new List<ColumnNameSize>(); list.Add(new ColumnNameSize("Computer Name", 0)); list.Add(new ColumnNameSize("Full Computer Name", 150)); list.Add(new ColumnNameSize("Migrate
var list = new List<ColumnNameSize>();
list.Add(new ColumnNameSize("Computer Name", 0));
list.Add(new ColumnNameSize("Full Computer Name", 150));
list.Add(new ColumnNameSize("Migrated", 150));
list.Add(new ColumnNameSize("Disabled", 0));
list.Add(new ColumnNameSize("Disabled & Not Migrated", 150));
generateListView(listViewObjects, list);
public static void generateListView(ListView varListView, List<ColumnNameSize> nameSizeList) {
varListView.ClearColumns();
foreach(ColumnNameSize nameSize in nameSizeList) {
varListView.AddColumn(nameSize.ColumnName, nameSize.ColumnSize);
}
}
var list=newlist();
添加(新的列名称(“计算机名”,0));
添加(新的列名称(“计算机全名”,150));
添加(新的列名称(“迁移”,150));
添加(新的列名称(“禁用”,0));
添加(新的列名称(“已禁用和未迁移”,150));
generateListView(listViewObjects,列表);
公共静态void generateListView(ListView varListView,列表名称列表){
varListView.ClearColumns();
foreach(nameSizeList中的ColumnNameSize nameSize){
varListView.AddColumn(nameSize.ColumnName,nameSize.ColumnSize);
}
}
我该怎么做呢。我尝试了多种组合:
public void generateListView(ObjectListView varListView, List<ColumnNameSize> nameSizeList) {
ArrayList myArrayList = new ArrayList();
foreach (ColumnNameSize nameSize in nameSizeList) {
OLVColumn columnHeader = new BrightIdeasSoftware.OLVColumn();
columnHeader.Width = nameSize.ColumnSize;
columnHeader.Text = nameSize.ColumnName;
myArrayList.Add(columnHeader);
varListView.AllColumns.Add(columnHeader);
}
Object columnsHeader = myArrayList.ToArray();
varListView.Columns.AddRange( columnsHeader);
}
public void generateListView(ObjectListView varListView,List nameSizeList){
ArrayList myArrayList=新建ArrayList();
foreach(nameSizeList中的ColumnNameSize nameSize){
OLVColumn columnHeader=新的BrightIdeasSoftware.OLVColumn();
columnHeader.Width=nameSize.ColumnSize;
columnHeader.Text=nameSize.ColumnName;
添加(columnHeader);
varListView.AllColumns.Add(columnHeader);
}
Object columnsHeader=myArrayList.ToArray();
varListView.Columns.AddRange(columnsHeader);
}
但似乎都不管用 你能试试这个吗
public void generateListView(ObjectListView varListView, List<ColumnNameSize> nameSizeList) {
List<OLVColumn> columnsList = new List<OLVColumn>();
foreach (ColumnNameSize nameSize in nameSizeList) {
OLVColumn columnHeader = new BrightIdeasSoftware.OLVColumn();
columnHeader.Width = nameSize.ColumnSize;
columnHeader.Text = nameSize.ColumnName;
columnsList .Add(columnHeader);
varListView.AllColumns.Add(columnHeader);
}
varListView.Columns.AddRange( columnsList.Cast<System.Windows.Forms.ColumnHeader>().ToArray());
}
public void generateListView(ObjectListView varListView,List nameSizeList){
列表列列表=新列表();
foreach(nameSizeList中的ColumnNameSize nameSize){
OLVColumn columnHeader=新的BrightIdeasSoftware.OLVColumn();
columnHeader.Width=nameSize.ColumnSize;
columnHeader.Text=nameSize.ColumnName;
columnsList.Add(columnHeader);
varListView.AllColumns.Add(columnHeader);
}
varListView.Columns.AddRange(columnsList.Cast().ToArray());
}
你能试试这个吗
public void generateListView(ObjectListView varListView, List<ColumnNameSize> nameSizeList) {
List<OLVColumn> columnsList = new List<OLVColumn>();
foreach (ColumnNameSize nameSize in nameSizeList) {
OLVColumn columnHeader = new BrightIdeasSoftware.OLVColumn();
columnHeader.Width = nameSize.ColumnSize;
columnHeader.Text = nameSize.ColumnName;
columnsList .Add(columnHeader);
varListView.AllColumns.Add(columnHeader);
}
varListView.Columns.AddRange( columnsList.Cast<System.Windows.Forms.ColumnHeader>().ToArray());
}
public void generateListView(ObjectListView varListView,List nameSizeList){
列表列列表=新列表();
foreach(nameSizeList中的ColumnNameSize nameSize){
OLVColumn columnHeader=新的BrightIdeasSoftware.OLVColumn();
columnHeader.Width=nameSize.ColumnSize;
columnHeader.Text=nameSize.ColumnName;
columnsList.Add(columnHeader);
varListView.AllColumns.Add(columnHeader);
}
varListView.Columns.AddRange(columnsList.Cast().ToArray());
}
要在通过代码手动添加列后使其可见,需要使用以下行重新生成它们:
varListView.RebuildColumns();
根据Bala的回答,您得到以下代码:
public void generateListView(ObjectListView varListView, List<ColumnNameSize> nameSizeList)
{
List<OLVColumn> columnsList = new List<OLVColumn>();
foreach (ColumnNameSize nameSize in nameSizeList)
{
OLVColumn columnHeader = new BrightIdeasSoftware.OLVColumn();
columnHeader.Width = nameSize.ColumnSize;
columnHeader.Text = nameSize.ColumnName;
columnsList.Add(columnHeader);
varListView.AllColumns.Add(columnHeader);
}
varListView.Columns.AddRange(columnsList.Cast<System.Windows.Forms.ColumnHeader>().ToArray());
varListView.RebuildColumns();
}
public void generateListView(ObjectListView varListView,List nameSizeList)
{
列表列列表=新列表();
foreach(nameSizeList中的ColumnNameSize nameSize)
{
OLVColumn columnHeader=新的BrightIdeasSoftware.OLVColumn();
columnHeader.Width=nameSize.ColumnSize;
columnHeader.Text=nameSize.ColumnName;
columnsList.Add(columnHeader);
varListView.AllColumns.Add(columnHeader);
}
varListView.Columns.AddRange(columnsList.Cast().ToArray());
varListView.RebuildColumns();
}
要在通过代码手动添加列后使其可见,需要使用以下行重新生成它们:
varListView.RebuildColumns();
根据Bala的回答,您得到以下代码:
public void generateListView(ObjectListView varListView, List<ColumnNameSize> nameSizeList)
{
List<OLVColumn> columnsList = new List<OLVColumn>();
foreach (ColumnNameSize nameSize in nameSizeList)
{
OLVColumn columnHeader = new BrightIdeasSoftware.OLVColumn();
columnHeader.Width = nameSize.ColumnSize;
columnHeader.Text = nameSize.ColumnName;
columnsList.Add(columnHeader);
varListView.AllColumns.Add(columnHeader);
}
varListView.Columns.AddRange(columnsList.Cast<System.Windows.Forms.ColumnHeader>().ToArray());
varListView.RebuildColumns();
}
public void generateListView(ObjectListView varListView,List nameSizeList)
{
列表列列表=新列表();
foreach(nameSizeList中的ColumnNameSize nameSize)
{
OLVColumn columnHeader=新的BrightIdeasSoftware.OLVColumn();
columnHeader.Width=nameSize.ColumnSize;
columnHeader.Text=nameSize.ColumnName;
columnsList.Add(columnHeader);
varListView.AllColumns.Add(columnHeader);
}
varListView.Columns.AddRange(columnsList.Cast().ToArray());
varListView.RebuildColumns();
}
要使ObjectListView按预期工作,必须将模型对象所需属性的名称定义为AspectName
与其先创建ColumnNameSize列表,不如逐个添加列:
ObjectListView1.AllColumns.Add(new OLVColumn()
{
Text = "Column Header",
Width = 100,
AspectName = "myProperty"
});
ObjectListView1.RebuildColumns();
要使ObjectListView按预期工作,必须将模型对象所需属性的名称定义为AspectName 与其先创建ColumnNameSize列表,不如逐个添加列:
ObjectListView1.AllColumns.Add(new OLVColumn()
{
Text = "Column Header",
Width = 100,
AspectName = "myProperty"
});
ObjectListView1.RebuildColumns();
看起来您添加了两次列;一次是从
AllColumns.Add()
,然后再次使用Columns.AddRange()
我知道,这就是我尝试的。。。我用了。加上,它没有出现。。因此,我尝试使用AddRange,但它需要OLVColumn[]而不是object。而不是Columns.AddRange()
callRebuildColumns()
从AllColumns
重新生成列,似乎您要添加两次列;一次是从AllColumns.Add()
,然后再次使用Columns.AddRange()
我知道,这就是我尝试的。。。我用了。加上,它没有出现。。因此,我尝试使用AddRange,但它需要OLVColumn[]而不是object。而不是Columns.AddRange()
callRebuildColumns()
从AllColumns
重建它们,它可以工作。。但前提是我在IDE中手动添加一列,然后执行此操作。然后添加更多列。如果我从IDE中删除该列并使用它,它将不会显示。似乎必须有某种设置才能显示标题。。这可能是因为它在第一次尝试时一直有效…我根据本页中的用法稍微修改了它,看看它是否有帮助,否则我没有其他想法。我将删除我的答案。它在tnx中起作用。现在只需要了解如何“显示”标题:-)您所做的一切都很好。所以不要删除。只是我可能错了