Код, который вы разместили, на самом деле не будет работать - будет выбран только последний сотрудник в списке.
Вы должны изменить порядок своих циклов for, чтобы исправить это. (Исправлено в отредактированном коде).
Я бы сделал что-то вроде этого:
lstWorkers.BeginUpdate();
foreach (ListItem assignedEmployee in lstWorkers.Items)
{
assignedEmployee.Selected = keys.Contains(assignedEmployee.Text);
}
lstWorkers.EndUpdate();
А если у вас много отобранных сотрудников, рассмотрите возможность преобразования keys
в хэш-набор или аналогичный.
Редактировать: На самом деле, вы можете использовать NameValueCollection
вместо массива ключей.
var selected = tempTaskRecord.GetWorkers();
lstWorkers.BeginUpdate();
foreach (ListItem assignedEmployee in lstWorkers.Items)
{
assignedEmployee.Selected = (selected.Values(assignedEmployee.Text) != null);
}
lstWorkers.EndUpdate();
selected.Values()
- это O (1), если у вас есть один рабочий на ключ в соответствии с MSDN , поэтому этот подход - O (n).