Я искал решение этой проблемы, но потерпел неудачу. Я не смог найти ничего, что лучше всего ответило бы на эту проблему, поэтому я нашел собственное решение. Я так рад, что смог сделать это решение более коротким, легким и понятным, но в то же время наилучшим образом отвечающим тому, что ищет большинство из нас.
public void ShowCurrentParked()
{
dt3 = new DataTable();
dt3.Clear(); //clear to avoid overlapping data (new DataTable is not enough)
lstViewShowCurrentParked.Items.Clear(); //clear items to accept new or updated data to avoid overlapping/duplicate data
dt3 = pBAL.ShowCurrentParked(); //datasource (class)
for (int j = 0; j < dt3.Rows.Count; j++)
{
lstViewShowCurrentParked.BeginUpdate();
lstViewShowCurrentParked.Items.Add(new ListViewItem(new string[] {dt3.Rows[j][1].ToString(),dt3.Rows[j][2].ToString(),
dt3.Rows[j][3].ToString()}));
}
lstViewShowCurrentParked.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
lstViewShowCurrentParked.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
lstViewShowCurrentParked.EndUpdate();
dt3.Clear(); //clear again to avoid overlapping data (new DataTable is not enough) .. to make datatable really empty
//BeginUpdate and EndUpdate will just lessen the flicker during listview update
}
Эффективность:
1. быстро
2. избежать дублирования данных
3. меньше мерцания