填充一个多列的列表视图

15

关于Listbox到ListView的迁移。

你好。

我有一个Listbox,我按照以下方式添加条目:

1;内容

其中1始终是整数,内容始终是字符串。我可以单独访问每个条目。

现在我想要结果按降序排序,即:

1;content
4;content2
2;content3

=>

4;content2
2;content3
1;content

因为这看起来不太好,我想使用一个Listview代替。就像这样:

Frequency | Content
===============
4 | content2
2 | content3
1 | content

问题在于,似乎不存在表格属性,所有条目都像在资源管理器中的列表视图中一样被放置为符号。此外,我在“到达”第二列(内容)方面遇到了问题,即我只看到了4,2,1。
如何在c# .net 4中准备和填充列表视图?
5个回答

46

将ListView设置为详细信息模式:

        listView1.View = View.Details;

然后设置你的两列:

        listView1.Columns.Add("Frequency");
        listView1.Columns.Add("Content");

然后添加你的项目:

        listView1.Items.Add(new ListViewItem(new string[]{"1", "content"}));
        listView1.Items.Add(new ListViewItem(new string[]{"4", "content2"}));
        listView1.Items.Add(new ListViewItem(new string[]{"2", "content3"}));

我选择使用带有字符串数组参数的ListViewItem构造函数重载,表示列值。但是有22个重载!请仔细查看并找到最适合您情况的那一个。

要设置项目的自动排序:

        listView1.Sorting = SortOrder.Descending;

非常感谢!这是我找到的唯一一个真正简单易懂的答案!正是我需要的(我正在从XML中填充列表视图)。你现在对我来说就是一个英雄。收下我的点赞 :) - NoobishPro
1
另外,你可以使用listView1.GridLines = true;来进行格式化,使用listView1.Columns[0].TextAlign = HorizontalAlignment.Center;对齐。有关列宽,请参见此处:https://dev59.com/U3M_5IYBdhLWcg3wt1rD。 - SharpC
太棒了,终于在这么长的时间里找到了答案哈哈,谢谢你啊♥ - Stefan Đorđević

1
我知道这篇文章已经发表了一年,但我认为这可能会有用。多年前,我写了一篇关于如何将ListView用作多列ListBox的文章,其中包括用于填充它的代码。该文章可在此处找到(Using a ListView as a multicolumn ListBox)。它是使用VB.NET编写的,但对于C#来说,代码几乎完全相同。我可能会使用C#重新编写它,并添加一个链接,但那将是另一个时间。
希望这能有所帮助,如果没有,请随时让我知道 :)

1

要添加列表视图标题并向列表视图添加项目,请尝试以下代码:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Lstv1.Columns.Add("Paramname", CInt(Lstv1.Width / 2))
        Lstv1.Columns.Add("Paramorder", CInt(Lstv1.Width / 2))
    End Sub


Private Sub appendlistview(ByVal Paramname As String, ByVal Paramorder As String)

    Dim newitem As New ListViewItem(Paramname)
    newitem.SubItems.Add(Paramorder)

    Lstv1.Items.Add(newitem)

End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAdd.Click

    Call appendlistview(TextBox1.Text, TextBox2.Text)
End Sub

2
这个标签是C#,不是VB。 - Nyerguds

0

Form with multi column populated listview

这是完整的表单代码-从命令窗口编译:

导入 System.Windows.Forms 导入 System.Drawing 公共类 Form1 继承自 System.Windows.Forms.Form

  Public ListView1 As ListView
  Public Col_Header1 As ColumnHeader
  Public Col_Header2 As ColumnHeader
  Public Col_Header3 As ColumnHeader
  Public Col_Header4 As ColumnHeader

  Public Sub New()
    ListView1 = New ListView
    Col_Header1 = New ColumnHeader
    Col_Header2 = New ColumnHeader
    Col_Header3 = New ColumnHeader
    Col_Header4 = New ColumnHeader
    ListView1.Columns.AddRange(New ColumnHeader() { _
                                       Col_Header1, _
                                       Col_Header2, _
                                       Col_Header3, _
                                       Col_Header4})
        Col_Header1.Text = "Header1"
        Col_Header1.Width = 200
        Col_Header2.Text = "Header2"
        Col_Header2.Width = 200
        Col_Header3.Text = "Header3"
        Col_Header3.Width = 200
        Col_Header4.Text = "Header4"
        Col_Header4.Width = 400
   Dim myItems As String() = New String() { _
                            "Item1", _
                            "Item2", _
                            "Item3", _
                            "Item4"}
   Dim myItems1 As String() = New String() { _
                            "Item11", _
                            "Item12", _
                            "Item13", _
                            "Item14"}
   Dim myItems2 As String() = New String() { _
                            "Item21", _
                            "Item22", _
                            "Item23", _
                            "Item24"}
   Dim myItems3 As String() = New String() { _
                            "Item31", _
                            "Item32", _
                            "Item33", _
                            "Item34"}
   Dim myItems4 As String() = New String() { _
                            "Item41", _
                            "Item42", _
                            "Item43", _
                            "Item44"}
           Dim lvi As ListViewItem = New ListViewItem(myItems)
           ListView1.Items.Add(lvi)
           Dim lvi1 As ListViewItem = New ListViewItem(myItems1)
           ListView1.Items.Add(lvi1)
           Dim lvi2 As ListViewItem = New ListViewItem(myItems2)
           ListView1.Items.Add(lvi2)
           Dim lvi3 As ListViewItem = New ListViewItem(myItems3)
           ListView1.Items.Add(lvi3)
           Dim lvi4 As ListViewItem = New ListViewItem(myItems4)
           ListView1.Items.Add(lvi4)
        ListView1.AllowColumnReorder = True
        ListView1.Font = New System.Drawing.Font("Segoe UI",15.0!, _
                       System.Drawing.FontStyle.Bold, System.Drawing. _
                                     GraphicsUnit.Point,CType(0, Byte))
        ListView1.FullRowSelect = True
        ListView1.HideSelection = False
        ListView1.Dock = DockStyle.Fill
        ListView1.Name = "listView1"            
        ListView1.View = View.Details
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(800,600)
        Me.Controls.Add(ListView1)
        Me.Text = "Deep_Research_For_ListView_Developement"
        Me.Name = "Research_Form1"            
        Me.ResumeLayout(False)
    End Sub

    Public Shared Sub Main()
      Dim form1 As Form1 = New Form1()
      form1.ShowDialog()
    End Sub 

    Private Sub Research_Form1_Load(ByVal sender As Object, _
                         ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Location = New System.Drawing.Point(0,0)

'''###########################-两个代码都可以使用-########################### ' 对于每个ListViewItem In listView1.Items ' i.ForeColor = Color.Green ' i.BackColor = Color.Yellow
' 下一个

            For Each i As ListViewItem In ListView1.Items
              If (i.Index Mod 2) = 1 Then
                 i.BackColor = Color.FromArgb(230, 150, 255)
                 i.UseItemStyleForSubItems = True
              End If
            Next

'''###########################-两个代码都可以使用-########################### 结束子程序 结束类

从CMD调用编译器:

vbc.exe -target:exe [路径]\Form1.vb [路径]\Form1.exe


-2

经典用法是使用 ListView GridView。GridView 是添加列的工具。

GridView


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接