代码之家  ›  专栏  ›  技术社区  ›  Dark Star1

如何添加到Listview项中的特定列?

  •  5
  • Dark Star1  · 技术社区  · 15 年前

    我创建了一个listview,列数在运行时确定。我一直在网上阅读关于listview的文章(现在仍然是),但我想知道如何在listview中的特定列中添加项目,我想:

    m_listview.Items.Add("1850").SubItems.Add("yes");
    

    假设 "1850"

    6 回复  |  直到 12 年前
        1
  •  20
  •   dunajski    4 年前

    ListViewItems不知道您的ListView列。

    为了直接引用该列,首先需要将所有列添加到ListViewItem。

    ListViewItem item = new ListViewItem();
    item.Text = "Column A";
    
    m_listView.Items.Add(item);
    

    为了让它也向C列添加文本,我们首先需要告诉它有一个B列。。。

    ListViewItem item = new ListViewItem();
    item.Text = "Column A";
    item.SubItems.Add("");
    item.SubItems.Add("Column C");
    
    m_listView.Items.Add(item);
    

    现在我们在ListViewItem中有A、B和C列,文本出现在A和C列中,而不是B列。

    最后现在我们已经告诉它有三个栏目,我们可以对这些栏目做任何我们喜欢的事情。。。

    ListViewItem item = new ListViewItem();
    item.Text = "Column A";
    item.SubItems.Add("");
    item.SubItems.Add("Column C");
    
    m_listView.Items.Add(item);
    
    m_listView.Items[0].SubItems[2].Text  = "change text of column C";
    m_listView.Items[0].SubItems[1].Text  = "change text of column B";
    m_listView.Items[0].SubItems[0].Text  = "change text of column A";
    

    希望有帮助!

        2
  •  6
  •   Chernikov    15 年前

    public class MyOwnListViewItem : ListViewItem 
    {
        private UserData userData;
    
        public MyOwnListViewItem(UserData userData) 
        {
            this.userData = userData;
            Update();
        }
    
        public void Update() 
        { 
           this.SubItems.Clear(); 
           this.Text = userData.Name; //for first detailed column
    
           this.SubItems.Add(new ListViewSubItem(this, userData.Surname)); //for second can be more
        }
    }
    

    哪里

    public class UserData 
    {
       public string Name;
       public string Surname;
    }
    

    listView1.Items.Add(new MyOwnListViewItem(new UserData(){Name="Name", Surname = "Surname"}));
    
        3
  •  2
  •   Kenny Mann    15 年前
    ListViewItem item = new ListViewItem("foo");
    item.SubItems.Add("foo2");
    this.listView1.Items.Add(item);
    

    切尔尼科夫很好地实现了它,使事情变得更加理智。

        4
  •  1
  •   takrl cck    13 年前

    这就是我所做的,因为这些列是在运行时通过用户首选项添加的。

    我使用listView向用户显示数据库中的信息。(我可能应该使用DataGrid,但当我第一次编写程序DataGrid时,它没有构建完整的行选择,而且我是一个太大的新手,无法浏览我找到的自定义控件示例)

    我创建了一个用户首选项表,该表保存了有关要添加的列的信息

    • ColumnText=string=要在标题中显示的文本
    • columnWidth=int
    • ColumName=string=此列将在我的其他数据库中引用的确切名称
    • ColumnIndex=int=列的显示索引

    我还上了一节课 ColumnPreferences 并为每一列添加了一个属性

    List<ColumnPreferences>

    我使用if语句检查preferences中的下一个首选项是否可见。

    ListView1.Columns.Add(ColumnName, ColumnText, ColumnWidth);

    在这一点上,列都被设置好了,为了保存用户拖动它们的位置,我基本上做了相反的事情。我遍历Listview.columns中的所有列,并将列显示索引和列宽保存回我的用户首选项表中

    从表中加载实际数据时,我使用相同的列首选项列表来检查是否应显示数据。

    它再次按显示索引排序,我检查它是否可见,如果不可见,我跳过它并转到下一个

    如果它是可见的,我使用 myDataReader[ ColumnPreference.ColumnName ]

    我只是将这些结果按顺序添加到列表视图项/子项,然后将它们添加到列表视图

        5
  •  0
  •   Koby Douek Cicero Silva Luiz Junior    6 年前
     For i = 0 To listAcheivments.Items.Count - 1
        Dim arrparam2(,) As String
        arrparam2 = New String(,) {{"@emp_code", txtEmpCode.Text}, {"@ach_year", CDate("01-01-" & listAcheivments.Items(i).SubItems(0).Text)}, {"@acheivement", listAcheivments.Items(i).SubItems(1).Text}}
    
        SaveData(arrparam2, "insert_acheivements")
    
    Next
    
        6
  •  -1
  •   Jesper Palm    15 年前

    ListViewItem item = m_listview.Items.Add("1850");
    item.Subitems.Add(string.Empty); //Make an add method that does this for every column you got and then you can use the indexer below.
    item.Subitems[1].Text = "Test";
    

    索引0是主项。指数1>这些是子项。