Возможно, когда вы обработали SelectedIndexChanged
или SelectedValueChanged
или любое другое событие. Это будет вызываться, когда вы устанавливаете свойство DataSource
вашего поля со списком.
Это происходит потому, что ValueMember
не установлен, когда назначается DataSource
. Предположим, вы написали строку кода в событии SelectedValueChanged
вашего списка со списком.
String myVal = dropdownCourses.SelectedValue.ToString();
Здесь я пытаюсь преобразовать SelectedValue
в значение типа строка.
Этот код будет выполнен сразу после присвоения DataSource
Комбобокса и перед присвоением ValueMember
. Таким образом, это означает, что поле со списком не имеет поля ValueMember
.
Таким образом, значение в SelectedValue
собственности будет null
и null
не может иметь свойство или метод, где мы пытаемся преобразовать его в строку. Таким образом, это вызовет ошибку object reference of instance of an object is not set
.
Решение:
Вы должны установить ValueMember
и DisplayMember
свойства перед назначением DataSource
в ComboBox.
dropdownCourses.ValueMember = "ID"; //First
dropdownCourses.DisplayMember = "Course"; //Second
dropdownCourses.DataSource = dt.Tables[0]; //Third
Второй способ заключается в том, что вы можете создать логический флаг, чтобы избежать ненужного вызова события во время Populating ComboBox.
bool bLoading = false;
{
dt = db.getCourses(depID, academicYearValue, semID);
if (dt.Tables[0].Rows.Count > 0)
{
bLoading = true;
try
{
dropdownCourses.DataSource = dt.Tables[0];
dropdownCourses.DisplayMember = "Course";
dropdownCourses.ValueMember = "ID";
}
catch{}
finally{
bLoading = false; //make sure that this variable must be false after populating combobox otherwise event will not work
}
}
}
private void dropdownCourses_SelectedValueChanged(....)
{
if (!bLoading)
{
Write your code here.
}
}
Я хотел бы предложить второй вариант, если вы не хотите, чтобы событие было ненужным.
Возможно, это нулевое значение, когда вы назначаете – Sajeetharan
. В таблице есть строки в нем примерно 48, я подтвердил это. Он войдет в цикл, если if (dt.Tables [0] .Rows.Count> 0), поэтому у него есть что-то .. – confusedMind
добавить условие if (dt.Tables.count> 0) – Sajeetharan