简体   繁体   English

在 ObjectListView C# 中生成列

[英]Generating columns in ObjectListView C#

In normal ListView I usually generate columns on fly with something like:在普通的 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("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);
        }
    }

How would I do it in ObjectListView .我将如何在ObjectListView中做到这一点。 I've tried multiple combinations:我尝试了多种组合:

    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);
    }

But none seems to work...但似乎没有一个工作......

Can you try this?你能试试这个吗?

 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());
    }

To make the columns visible after adding them manually through code, you need to rebuild them with the following line:要在通过代码手动添加列后使其可见,您需要使用以下行重新构建它们:

varListView.RebuildColumns();

Based on Bala's answer, you get the following code:根据 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();
}

For the ObjectListView to work as intended, you have to define the name of the desired property of your model object as AspectName.要使 ObjectListView 按预期工作,您必须将 model object 的所需属性的名称定义为 AspectName。

Instead of first creating a list of ColumnNameSize, I'd rather add the columns one by one:我宁愿一一添加列,而不是首先创建 ColumnNameSize 列表:

ObjectListView1.AllColumns.Add(new OLVColumn()
{
    Text = "Column Header",
    Width = 100,
    AspectName = "myProperty"
});

ObjectListView1.RebuildColumns();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM