简体   繁体   English

C#将项目添加到ObjectListView

[英]C# Add item to ObjectListView

My program extracts Windows Updates, detects the version numbers and logs them to columns (KB, Version) in a list view, but I'm trying to change this to an ObjectListView so I can sort the columns. 我的程序提取Windows Update,检测版本号,并将它们记录到列表视图中的列(KB,版本)中,但是我试图将其更改为ObjectListView,以便对列进行排序。 I can't for the life of me work out how to write the results to an ObjectListView and nothing I try seems to work. 我一辈子都无法解决如何将结果写入ObjectListView的问题,但我尝试的一切似乎都没有效果。 Here's my current code: 这是我当前的代码:

foreach (string file in msu)
{
    string KB = GetKBNumber(file);
    Expand.MSU(file, TempDirectory + "\\" + KB);
    List<string> versions = GetVersionNumbers(TempDirectory + "\\" + KB);

    foreach (string version in versions)
    {
        ListViewItem itm = new ListViewItem(new[] { KB, version });
        olvOutput.Items.Add(itm);
    }
    PerformStep();
}

But it just writes blank data to the control. 但是它只是将空白数据写入控件。 What am I doing wrong? 我究竟做错了什么? Thanks in advance. 提前致谢。

Edit: Here's the olvOutput designer code: 编辑:这是olvOutput设计器代码:

        // 
        // olvOutput
        // 
        this.olvOutput.AllColumns.Add(this.olvKBNumber);
        this.olvOutput.AllColumns.Add(this.olvVersion);
        this.olvOutput.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
        | System.Windows.Forms.AnchorStyles.Left) 
        | System.Windows.Forms.AnchorStyles.Right)));
        this.olvOutput.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
        this.olvKBNumber,
        this.olvVersion});
        this.olvOutput.Location = new System.Drawing.Point(18, 12);
        this.olvOutput.Name = "olvOutput";
        this.olvOutput.ShowGroups = false;
        this.olvOutput.Size = new System.Drawing.Size(571, 193);
        this.olvOutput.TabIndex = 8;
        this.olvOutput.UseAlternatingBackColors = true;
        this.olvOutput.UseCompatibleStateImageBehavior = false;
        this.olvOutput.View = System.Windows.Forms.View.Details;
        // 
        // olvKBNumber
        // 
        this.olvKBNumber.AspectName = "";
        this.olvKBNumber.CellPadding = null;
        this.olvKBNumber.MaximumWidth = 100;
        this.olvKBNumber.MinimumWidth = 100;
        this.olvKBNumber.Text = "KB Number";
        this.olvKBNumber.Width = 100;
        // 
        // olvVersion
        // 
        this.olvVersion.AspectName = "";
        this.olvVersion.CellPadding = null;
        this.olvVersion.Text = "Version";
        this.olvVersion.Width = 113;

Modify the first of your snippets as: 将您的第一个片段修改为:

foreach (string file in msu)
{
    string KB = GetKBNumber(file);
    Expand.MSU(file, TempDirectory + "\\" + KB);
    List<string> versions = GetVersionNumbers(TempDirectory + "\\" + KB);

    foreach (string version in versions)
    {
        olvOutput.AddObject(new { kbAspectName = KB, versionAspectName = version });
    }
    PerformStep();
}

... and modify the second code snippet as: ...并将第二个代码段修改为:

// 
// olvKBNumber
// 
this.olvKBNumber.AspectName = "kbAspectName";

// ...

// 
// olvVersion
// 
this.olvVersion.AspectName = "versionAspectName";

Disclaimer: never worked with ObjectListView before so I am not saying this is the best way to achieve what you want. 免责声明:以前从未使用过ObjectListView ,所以我并不是说这是实现所需目标的最佳方法。

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

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