Jesun Bicar
Jesun Bicar

Reputation: 41

Multi column Listview populated data wont display

I need help on a thing, ive been populating a listview via background worker but it appears it had a row count at the end of the loop but the data for is not showing visually on the listview. i really dont know what is happening. After the background worker process is done. ive put a message box to show the listview item count but it shows no data on listview. Please see picture. Thank you

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            listView1.View = View.Details;
            DataTable dtdt = new DataTable();
            dtdt = qr.history(); // query in sql to datatable

            for (int i = 0; i < dtdt.Rows.Count; i++)// loop data to listviewitem
            {

                DataRow dr = dtdt.Rows[i];
                ListViewItem listitem = new   ListViewItem(dr["custnum"].ToString());
                listitem.SubItems.Add(dr["custname"].ToString().Trim());
                listitem.SubItems.Add(dr["ratecable"].ToString().Trim());
                listitem.SubItems.Add(dr["rateinternet"].ToString().Trim());
                listitem.SubItems.Add(dr["rateext"].ToString().Trim());
                listitem.SubItems.Add(dr["status"].ToString().Trim());
                listitem.SubItems.Add(dr["classname"].ToString().Trim());
                listitem.SubItems.Add(dr["SVCstadd"].ToString().Trim());
                listitem.SubItems.Add(dr["SVCctadd"].ToString().Trim());
                listitem.SubItems.Add(dr["svctelno"].ToString().Trim());
                listitem.SubItems.Add(dr["bilstadd"].ToString().Trim());
                listitem.SubItems.Add(dr["bilctadd"].ToString().Trim());
                listitem.SubItems.Add(dr["billtel"].ToString().Trim());
                listitem.SubItems.Add(dr["billtel2"].ToString().Trim());
                listitem.SubItems.Add(dr["fax"].ToString().Trim());
                listitem.SubItems.Add(dr["zoneno"].ToString().Trim());
                listitem.SubItems.Add(dr["zoneName"].ToString().Trim());
                listitem.SubItems.Add(dr["bookno"].ToString().Trim());
                listitem.SubItems.Add(dr["seqno"].ToString().Trim());
                listitem.SubItems.Add(dr["Balance"].ToString().Trim());
                listitem.SubItems.Add(dr["balance1"].ToString().Trim());
                listitem.SubItems.Add(dr["balance2"].ToString().Trim());
                listitem.SubItems.Add(dr["balance3"].ToString().Trim());
                listitem.SubItems.Add(dr["billamnt"].ToString().Trim());
                listitem.SubItems.Add(dr["maxdate"].ToString().Trim());



                 this.BeginInvoke(new MethodInvoker(delegate { additemtoLV(listitem); }));


            }
            System.Threading.Thread.Sleep(100);

        }


 private delegate void additemtoLVdelegat(ListViewItem ls);

    public void additemtoLV(ListViewItem ls)
    {
        if (InvokeRequired)
        {
            Invoke(new additemtoLVdelegat(additemtoLV), ls);
        }
        else
        {
            listView1.Items.Add(ls);
        }
    }

enter image description here

Upvotes: 0

Views: 125

Answers (1)

Ben Jackson
Ben Jackson

Reputation: 1136

Further to comments posted please try the below, which should correctly use the GUI thread, and also has basic exception handling in case an unhandled exception is causing the problem :

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    try
    {
        listView1.View = View.Details;
        DataTable dtdt = new DataTable();
        dtdt = qr.history(); // query in sql to datatable
        var listItems = new List<ListViewItem>();

        for (int i = 0; i < dtdt.Rows.Count; i++)// loop data to listviewitem
        {
            DataRow dr = dtdt.Rows[i];
            ListViewItem listitem = new ListViewItem(dr["custnum"].ToString());
            listitem.SubItems.Add(dr["custname"].ToString().Trim());
            listitem.SubItems.Add(dr["ratecable"].ToString().Trim());
            listitem.SubItems.Add(dr["rateinternet"].ToString().Trim());
            listitem.SubItems.Add(dr["rateext"].ToString().Trim());
            listitem.SubItems.Add(dr["status"].ToString().Trim());
            listitem.SubItems.Add(dr["classname"].ToString().Trim());
            listitem.SubItems.Add(dr["SVCstadd"].ToString().Trim());
            listitem.SubItems.Add(dr["SVCctadd"].ToString().Trim());
            listitem.SubItems.Add(dr["svctelno"].ToString().Trim());
            listitem.SubItems.Add(dr["bilstadd"].ToString().Trim());
            listitem.SubItems.Add(dr["bilctadd"].ToString().Trim());
            listitem.SubItems.Add(dr["billtel"].ToString().Trim());
            listitem.SubItems.Add(dr["billtel2"].ToString().Trim());
            listitem.SubItems.Add(dr["fax"].ToString().Trim());
            listitem.SubItems.Add(dr["zoneno"].ToString().Trim());
            listitem.SubItems.Add(dr["zoneName"].ToString().Trim());
            listitem.SubItems.Add(dr["bookno"].ToString().Trim());
            listitem.SubItems.Add(dr["seqno"].ToString().Trim());
            listitem.SubItems.Add(dr["Balance"].ToString().Trim());
            listitem.SubItems.Add(dr["balance1"].ToString().Trim());
            listitem.SubItems.Add(dr["balance2"].ToString().Trim());
            listitem.SubItems.Add(dr["balance3"].ToString().Trim());
            listitem.SubItems.Add(dr["billamnt"].ToString().Trim());
            listitem.SubItems.Add(dr["maxdate"].ToString().Trim());

            listItems.Add(listitem);
        }

        this.BeginInvoke(((Action)(() => { listView1.Items.AddRange(listItems.ToArray()); })));
    }
    catch (System.Exception exc)
    {
        this.BeginInvoke(((Action)(() => { MessageBox.Show("BackgroundWorker error: " + exc);})));
    }
}

Upvotes: 1

Related Questions