Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何按所需顺序填充Forms.ListViewItem的列?_C#_.net - Fatal编程技术网

C# 如何按所需顺序填充Forms.ListViewItem的列?

C# 如何按所需顺序填充Forms.ListViewItem的列?,c#,.net,C#,.net,我正在向System.Windows.ListViewItem.Subitems集合添加数据,该集合是ListViewItem.ListViewSubItemCollection数据类型。我知道没有与添加到数据集合的项目相关联的订单。因此,用任意顺序的数据填充集合对数据存储没有影响。(编辑:我现在知道集合与数据无序的集合不同) 如何控制集合中每个数据的分配/显示列?到目前为止,我的数据正在显示,但是,它似乎是任意分配的 数据的显示方式有一定的顺序,但有点跳跃 public LogMessageI

我正在向
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列和第8列。在我在包含
Item.Tag=this的行之后对该代码进行编辑之前,现有列0到7将正确显示。它所做的是开始向第3、4、5、8、9、10、11、12、13、14列添加数据……子项的列顺序仅由添加新子项的顺序决定

ListViewSubItemCollection
上调用
Add
,会将它们添加到指定的位置:

  • “分项1”->第2栏
  • “分项2”->第3栏
  • 等等
您可以使用
ListViewSubItemCollection
insert
方法将项目插入到特定位置,但是,这将“向上”现有项目,并将新项目放置在指定的
索引处

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

编辑以下用户评论

为了在
列表视图
中获得8列,只需添加7个子项(第一列始终是
列表视图项
文本)

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

一旦您添加了子项,就可以随意更改它们,但必须首先通过执行上述操作来添加它们。 在添加子项(列)时,只需将正确的值添加到每个子项(列)中是完全正常的

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

newItem.SubItems[0].Text = "New column 2 value";
newItem.SubItems[1].Text = "New column 3 value";
子项
集合是基于零的(通常),因此值0表示第2列,值1表示第3列,依此类推。 要更改第1列,只需修改
ListViewItem
本身的
Text
属性:

newItem.Text = "New column 1 value";

前3列已经有数据,后面3列没有数据(我打算不谈),后面2列也有数据。这意味着列0、1、2、6和7都有数据。如果我使用
Insert
方法,它会在
系统中失败。ArgumentOutOfRangeException
。我想
Add
Insert
Add column index 8+,但由于我在该索引之前有空列(在其他地方以某种方式初始化),它给了我一个未处理的异常。@AlexSmith我更新了问题以提供更详细的信息,以便更全面地解决您的查询。谢谢,@Martin_Parkin。
newItem.Text = "New column 1 value";