Populating a listview multi-column

Regarding Listbox to ListView migration.

Hello.

I have a Listbox I add entries like this to:

1;content

Where 1 is always an int and content is always a string. I can access each one seperately.

Now I want the result to be sorted descendingly, ie:

1;content
4;content2
2;content3

=>

4;content2
2;content3
1;content

As this doesn't look good, I want to use a Listview instead. Like this:

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

Problem is, the tabular property does not seem to exist, all entries are being put in like symbols in a listview in explorer. Also I have problems "reaching" the 2nd column(content), ie I only see 4,2,1.

How would I prepare and populate a listview in c# .net 4 for that?

Answers


To set the ListView into Details mode:

        listView1.View = View.Details;

Then to set up your two columns:

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

Then to add your items:

        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"}));

I chose to use the overload of the ListViewItem constructor that takes a string array representing the column values. But there are 22 overloads! Look through then and find the one that fits your situation best.

To set automatic sorting of items:

        listView1.Sorting = SortOrder.Descending;

I realise that this post is over a year old but I thought this may be of use, I wrote an article years ago about using a ListView as a multicolumn ListBox, which includes code for populating it. The article is available here (Using a ListView as a multicolumn ListBox) it is written using VB.NET but the code is pretty much exactly the same for C#, I may rewrite it using C# and will add a link for that but that'll be another time.

Hope this helps, if not feel free to let me know :)


To add the list view headers and add items to list view, try this code:

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

Classic use us ListView GridView. The GridView is what add the columns.

GridView


Need Your Help

Run multiple QEventLoops in parallel (for QtNetwork)

c++ qt parallel-processing qtnetwork qeventloop

I try to extend an old program that runs under Ubuntu/Linux Desktop with a Qt-network support. Having a LAN communication with these libraries needs to run the .exec() of the QEventLoop to really s...