【问题标题】:Populating a listview multi-column填充列表视图多列
【发布时间】:2012-07-14 00:19:23
【问题描述】:

关于 Listbox 到 ListView 的迁移。

你好。

我有一个列表框,我将这样的条目添加到:

1;内容

其中 1 始终是 int,而 content 始终是字符串。我可以单独访问每一个。

现在我希望结果降序排序,即:

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 中准备和填充列表视图?

【问题讨论】:

    标签: .net c#-4.0 listview


    【解决方案1】:

    Classic 使用我们的 ListView GridView。 GridView 用于添加列。

    GridView

    【讨论】:

      【解决方案2】:

      将 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 填充列表视图)你现在是我的英雄。接受我的投票:)
      • 也可以使用listView1.GridLines = true;进行格式化,对齐listView1.Columns[0].TextAlign = HorizontalAlignment.Center;。列宽见这里:stackoverflow.com/questions/1257500/….
      • 像个魅力一样工作,这么久终于找到答案了哈哈,谢谢大佬♥
      【解决方案3】:

      我意识到这篇文章已经有一年多了,但我认为这可能有用,我在几年前写了一篇关于使用 ListView 作为多列 ListBox 的文章,其中包括用于填充它的代码。该文章可在此处 (Using a ListView as a multicolumn ListBox) 获得,它是使用 VB.NET 编写的,但 C# 的代码几乎完全相同,我可能会使用 C# 重写它并为此添加一个链接,但这将是另一次。

      希望这会有所帮助,如果不放心,请告诉我 :)

      【讨论】:

        【解决方案4】:

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

        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
        

        【讨论】:

        • 这被标记为 c#,而不是 VB。
        【解决方案5】:

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

        导入 System.Windows.Forms 导入 System.Drawing 公开课形式1 继承 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)
        

        '''##########################-两个代码都有效-############ ############### ' 对于每个 i 作为 ListViewItem 在 listView1.Items ' i.ForeColor = 颜色.绿色 ' i.BackColor = 颜色.黄色
        ' 下一个

                    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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-05
          • 1970-01-01
          • 1970-01-01
          • 2021-03-08
          • 1970-01-01
          • 1970-01-01
          • 2011-05-01
          • 1970-01-01
          相关资源
          最近更新 更多