繁体   English   中英

Listview花费太长时间来更新C#

[英]Listview taking too long to update C#

我有一个问题,我已经坚持了很长时间,希望您能全力以赴。

我有一个列表视图,该列表视图在程序首次加载时就用数据库中的数据填充。

在我的程序中,我有一个按钮,它通过从列表视图中清除所有数据并运行相同的方法(在程序加载时填充列表视图)来“刷新”此列表视图。 但是,此刷新按钮花费的时间太长(约10秒)才能刷新。

填充列表视图后,程序如何在2秒钟内加载,但是再次运行该方法时,花费的时间要长得多。

请查看我随附的代码并提出任何更改建议,对于长度,我深表歉意。 谢谢。

public void AllHomeworkers()
{
    //This updates the homeworkers listview to contain all the records from the homeworkers table.

    listHomeworkersAll.BeginUpdate(); //This uses the begin update process on the listview, this is used to stop flickering
    listHomeworkersAll.Items.Clear(); //Clears all the items from the listview

    // this takes the datatable returned from AllHomeworkers stored procedure.
    // It then loops through the datatable adding every row to the list view.

    DataTable dtHomeworkers = _businessLayer.AllHomeworkers();
    for (int i = 0; i < dtHomeworkers.Rows.Count; i++)
    {
        DataRow drowHomeworkers = dtHomeworkers.Rows[i];

        if (drowHomeworkers.RowState != DataRowState.Deleted)
        {
            ListViewItem lvi = new ListViewItem(drowHomeworkers["StaffID"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Title"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Initials"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Forename"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Surname"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Address"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Address2"].ToString());
            lvi.SubItems.Add(drowHomeworkers["City"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Postcode"].ToString());
            lvi.SubItems.Add(drowHomeworkers["CostCentre"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Email"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Telephone"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Mobile"].ToString());
            lvi.SubItems.Add(drowHomeworkers["FMID"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Comments"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Leaver"].ToString());
            lvi.SubItems.Add(drowHomeworkers["LeavingDate"].ToString());
            lvi.SubItems.Add(drowHomeworkers["Base"].ToString());
            lvi.SubItems.Add(drowHomeworkers["NextVisit"].ToString());
            var deleted = drowHomeworkers["Deleted"].ToString();
            if (deleted != "")
            {
                lvi.ForeColor = Color.Red;
            }
            listHomeworkersAll.Items.Add(lvi);
        }
    }
    listHomeworkersAll.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);  
    // this sorts the columns to the size of the largest object stored inside them.

    listHomeworkersAll.EndUpdate();
    // this ends the listview update process.
}

刷新之前,可能需要SuspendLayout() ,并在填充所有数据之后需要ResumeLayout()

在将多个控件添加到父控件时,建议您在初始化要添加的控件之前调用SuspendLayout方法。 将控件添加到父控件后,调用ResumeLayout方法。 这将提高具有许多控件的应用程序的性能。

我认为这可能会快得多...

    public void AllHomeworkers()
    {

        //This updates the homeworkers listview to contain all the records from the homeworkers table.

        listHomeworkersAll.BeginUpdate(); //This uses the begin update process on the listview, this is used to stop flickering
        listHomeworkersAll.Items.Clear(); //Clears all the items from the listview

        // this takes the datatable returned from AllHomeworkers stored procedure.
        // It then loops through the datatable adding every row to the list view.

        DataTable dtHomeworkers = _businessLayer.AllHomeworkers();

        List<ListViewItem> listHomeworkers = new List<ListViewItem>();

        for (int i = 0; i < dtHomeworkers.Rows.Count; i++)
        {
            DataRow drowHomeworkers = dtHomeworkers.Rows[i];

            if (drowHomeworkers.RowState != DataRowState.Deleted)
            {
                ListViewItem lvi = new ListViewItem(drowHomeworkers["StaffID"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Title"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Initials"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Forename"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Surname"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Address"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Address2"].ToString());
                lvi.SubItems.Add(drowHomeworkers["City"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Postcode"].ToString());
                lvi.SubItems.Add(drowHomeworkers["CostCentre"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Email"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Telephone"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Mobile"].ToString());
                lvi.SubItems.Add(drowHomeworkers["FMID"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Comments"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Leaver"].ToString());
                lvi.SubItems.Add(drowHomeworkers["LeavingDate"].ToString());
                lvi.SubItems.Add(drowHomeworkers["Base"].ToString());
                lvi.SubItems.Add(drowHomeworkers["NextVisit"].ToString());
                var deleted = drowHomeworkers["Deleted"].ToString();
                if (deleted != "")
                {
                    lvi.ForeColor = Color.Red;
                }
                listHomeworkers.Add((ListViewItem)lvi);
            }
        }

        ListViewItem[] arr = listHomeworkers.ToArray();

        listHomeworkersAll.Items.AddRange(arr);

        listHomeworkersAll.EndUpdate();
        // this ends the listview update process.
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM