Заполнение списка в несколько столбцов
Относительно миграции 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
Проблема в том, что табличное свойство, кажется, не существует, все записи помещаются в виде символов в виде списка в проводнике. Также у меня проблемы с "достижением" 2-го столбца (контента), т.е. я вижу только 4,2,1.
Как мне подготовить и заполнить просмотр списка в C# .net 4 для этого?
5 ответов
Чтобы перевести ListView в режим Details:
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;
Чтобы добавить заголовки представления списка и добавить элементы в представление списка, попробуйте этот код:
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
Я понимаю, что этому посту более года, но я подумал, что это может быть полезно, я написал статью несколько лет назад об использовании ListView в качестве многоколоночного ListBox, который включает в себя код для его заполнения. Статья доступна здесь (с использованием ListView в качестве многоколоночного ListBox), она написана с использованием VB.NET, но код почти такой же для C#, я могу переписать его с помощью C# и добавлю ссылку для этого, но это будет быть в другой раз.
Надеюсь, это поможет, если не стесняйтесь, дайте мне знать:)
Here is the full form code-Compile it from command window::
Imports System.Windows.Forms Imports System.Drawing Public Class Form1 Inherits 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)
'''###########################-Both Codes work-########################### ' For Each i As ListViewItem In listView1.Items ' i.ForeColor = Color.Green ' i.BackColor = Color.Yellow
' Next
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
'''###########################-Both Codes work-########################### End Sub End Class
Compiler Call From CMD:-
vbc.exe -target:exe [path]\Form1.vb[path]\Form1.exe
Классическое использование нас ListView GridView. GridView - это то, что добавляет столбцы.