0

我正在将数据添加到一个数据类型的System.Windows.ListViewItem.Subitems集合中。ListViewItem.ListViewSubItemCollection我知道添加到数据集合中的项目没有关联的顺序。因此,以任意顺序用数据填充集合对您的数据存储没有影响。(编辑:我现在知道集合与数据无序的集合不同)。

如何控制我的集合中的每个数据被分配/显示的列?截至目前,我的数据正在显示,但是,它似乎是任意分配的。

数据的显示方式有一些顺序,但它有点跳跃......

public LogMessageItem ( LoggerItem parent, LogMessage logMsg )
{
    Parent = parent;
    Message = logMsg;
    string parentName = Parent.Name;

    if( (Parent.Name == logMsg.ThreadName) && (Parent.Parent != null) )
        parentName = Parent.Parent.Name;

    Item                 = new ListViewItem ( logMsg.TimeStamp.ToString ( UserSettings.Instance.TimeStampFormatString ) );   // Create List View Item
    Item.SubItems.Add    ( logMsg.Level.Name );    // Appears in column 0
    Item.SubItems.Add    ( parentName );           // value is null
    Item.SubItems.Add    ( logMsg.ThreadName );    // Appears in column 6

    string  msg          = logMsg.Message.Replace ( "\r\n", " " );
    msg                  = msg.Replace ( "\n", " " );
    Item.SubItems.Add    ( msg );                  // Appears in column 7
    Item.ToolTipText     = msg;

    Item.ForeColor       = logMsg.Level.Color;
    Item.Tag             = this;
}

也许根据列标题的初始化方式,输入数据的方式有一个首选的顺序?

上面示例中的数据正在正确显示,但是当我编辑它时,我希望填充第 8 列及以后的列。在包含Item.Tag = this;. 它的作用是开始将数据添加到第 3、4、5、8、9、10、11、12、13、14 列等等......

4

1 回答 1

0

子项的列顺序仅由您添加新子项的顺序决定。

调用会将它们添加到指示的位置AddListViewSubItemCollection

  • “子项 1”-> 第 2 列
  • “子项 2”-> 第 3 列
  • 等等

Insert您可以使用 的方法将项目插入到特定位置ListViewSubItemCollection,但是,这将“向上”移动现有项目并将新项目放置在指定的index

您可以在添加后随意修改“列”(或更准确地说是子项),但必须先添加。

编辑以下用户评论

为了在 中实现 8 列ListView,您只需添加 7 个子项(第一列始终是TextListViewItem),如下所示

ListViewItem newItem = new ListViewItem("Column 1");

newItem.SubItems.Add("Column 2");
newItem.SubItems.Add("Column 3");
newItem.SubItems.Add("Column 4");
newItem.SubItems.Add("Column 5");
newItem.SubItems.Add("Column 6");
newItem.SubItems.Add("Column 7");
newItem.SubItems.Add("Column 8");

您可以将我输入的名称(即“第 6 列”)替换为所需的任何内容 - 包括""将在该列中显示为空值的空字符串。

添加子项后,可以随意更改,但必须先通过上述操作添加。在添加时将正确的值添加到每个子项(列)中是完全正常的。

但是,如果您想在添加后修改子项\列,只需执行以下操作:

newItem.SubItems[0].Text = "New column 2 value";
newItem.SubItems[1].Text = "New column 3 value";

集合是从零开始的SubItems(像往常一样),所以值 0 表示第 2 列,值 1 表示第 3 列,依此类推。要更改第 1 列,只需修改Text其自身的属性ListViewItem

newItem.Text = "New column 1 value";
于 2013-08-05T22:41:04.753 回答