【问题标题】:C# Add item to ObjectListViewC# 将项目添加到 ObjectListView
【发布时间】:2026-01-03 11:15:01
【问题描述】:

我的程序提取 Windows 更新、检测版本号并将它们记录到列表视图中的列(KB、版本)中,但我试图将其更改为 ObjectListView,以便我可以对列进行排序。我一生都无法弄清楚如何将结果写入 ObjectListView 并且我尝试的任何方法似乎都不起作用。这是我当前的代码:

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

但它只是将空白数据写入控件。我究竟做错了什么?提前致谢。

编辑:这是 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;

【问题讨论】:

  • 您能否提供一个代码来创建和设置olvOutput
  • 控件的属性会很好。
  • 抱歉,我已经编辑了我的帖子以包含设计器代码。
  • Michal 的回答很好。一般而言,如果您发现自己弄乱了 ListViewItem,那么您可能做错了。使用 OLV 时,您永远不必手动修改 ListViewItem。重新阅读文档,它非常好。
  • 感谢您的提示!我现在再读一遍。

标签: c# winforms objectlistview


【解决方案1】:

将你的第一个 sn-ps 修改为:

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

...并将第二个代码sn-p修改为:

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

// ...

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

免责声明: 以前从未与ObjectListView 合作过,所以我并不是说这是实现您想要的最佳方式。

【讨论】:

  • 对不起,你可能猜到我还是新手。我已经接受了答案,但由于我没有足够的声誉而无法投票 - 抱歉!