Вдохновленный ответом here, я реорганизовал свой код, чтобы добавить запись в свой общий список после ее популяции initil через LINQ, а затем попытаться выбрать этот добавленный элемент в поле со списком, которому назначено содержимое списка.Почему мой элемент combobox не обнаружен и не выбран?
Для некоторых контекстов/концептуализации поле со списком заполняется студентами-кандидатами; если отображаемая неделя уже запланирована, хотя ученик, уже запланированный в этом слоте на эту неделю, вставляется в список, который служит в качестве источника данных combobox после других. Наконец, если такой ученик существует в поле со списком, мое намерение состоит в том, чтобы выбрать этот (но остальные остаются в списке в случае необходимости изменения назначенного студента).
Вот код:
private void PopulateBibleReadingComboBox()
{
int BIBLE_READING_TALK_TYPE = 1;
if (!System.IO.File.Exists(AYttFMConstsAndUtils.STUDENTS_FILENAME)) return;
if (null == studentsList) return;
string assignedStudentFirstname = string.Empty;
string assignedStudentLastname = string.Empty;
Student assignedStudent = null;
if (currentWeekSaved)
{
DateTime currentWeek = Convert.ToDateTime(comboBoxWeekToSchedule.SelectedValue);
AssignmentHistory ah = AYttFMConstsAndUtils.AssignmentHistList
.FirstOrDefault(i => i.WeekOfAssignment == currentWeek && i.TalkType == 1);
assignedStudentFirstname = AYttFMConstsAndUtils.GetStudentFirstNameForID(ah.StudentID_FK);
assignedStudentLastname = AYttFMConstsAndUtils.GetStudentLastNameForID(ah.StudentID_FK);
assignedStudent = new Student() {FirstName = assignedStudentFirstname, LastName = assignedStudentLastname, StudentID = ah.StudentID_FK};
}
List<Student> BRStudents =
studentsList.Where(h => h.EnrolledInAYttFM)
.Where(i => i.RecommendedNextTalkTypeID.Equals(BIBLE_READING_TALK_TYPE))
.OrderBy(j => j.WeekOfLastAssignment)
.ToList();
if (null != assignedStudent)
{
BRStudents.Add(assignedStudent);
}
comboBoxBR.DataSource = BRStudents;
comboBoxBR.DisplayMember = "FullName";
comboBoxBR.ValueMember = "StudentID";
if (null != assignedStudent))
{
comboBoxBR.SelectedIndex = comboBoxBR.Items.IndexOf(assignedStudent.FullName);
}
}
Проблема заключается в том, что, хотя условный «SelectedIndex/IndexOf» линия является достигнута, и assignedStudent.FullName является то, что оно должно быть, и является теперь добавлены в список, а затем в выпадающем списке, что элемент не выбран с этой линии:
comboBoxBR.SelectedIndex = comboBoxBR.Items.IndexOf(assignedStudent.FullName);
Скорее comboBoxBR .SelectedIndex равен -1 (хотя, опять же, что fullName существует в combobox в этой точке).
Примечание: Член «FullName» класса Student рассчитывается следующим образом:
public class Student
{
public int StudentID { get; set; }
. . .
public string FirstName { get; set; }
public string LastName { get; set; }
. . .
public string FullName
{
get
{
return string.Format("{0} {1}", FirstName, LastName);
}
set { ; }
}
}