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 以降を埋めたいと思います。を含む行の後にこのコードを編集するまで、既存の列 0 ~ 7 は正しく表示されていますItem.Tag = this;。それが行うことは、列3、4、5、8、9、10、11、12、13、14などにデータを追加し始めることです...

4

1 に答える 1

0

サブアイテムの列の順序は、新しいサブアイテムを追加する順序によって決まります。

を呼び出すAddと、ListViewSubItemCollection指定された位置にそれらが追加されます。

  • 「サブ項目 1」 -> 列 2
  • 「サブ項目 2」 -> 列 3
  • 等々

Insertのメソッドを使用してアイテムを特定の位置に挿入できますがListViewSubItemCollection、これにより、既存のアイテムが「上」に移動し、指定された に新しいアイテムが配置されますindex

「列」(より正確にはサブ項目) は追加後に自由に変更できますが、最初に追加する必要があります。

次のユーザーコメントを編集

で 8 列を実現するにはListView、7 つのサブ項目を追加するだけです (最初の列は常に のTextですListViewItem) 。

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 に答える