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";