Ссылка на объект не установлена ??на экземпляр объекта для поля со списком

Я видел много ссылок на объекты, не заданных для экземпляра вопросов объекта, но я не смог найти свой сценарий ни в одном.

У меня есть поле со списком имени comboBox1. Во время загрузки формы у меня есть код для заполнения combobox:

  private void Form1_Load(object sender, EventArgs e)
  {
        // TODO: This line of code loads data into the
        // 'tenderDBDataSet.tbl_Tender_To_Details' table.
        // You can move, or remove it, as needed.
        OleDbCommand cmd = new OleDbCommand("SELECT DISTINCT 
            tbl_Tender_To_Details.To_Name, tbl_Tender_To_Details.To_Address1, 
            tbl_Tender_To_Details.To_Address2, 
            tbl_Tender_To_Details.To_City, tbl_Tender_To_Details.To_PinCode "+
            "FROM tbl_Tender_To_Details "+
            "WHERE to_Name IS NOT NULL ", conn);
        try
        {
            conn.Open();
            OleDbDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                comboBox1.Items.Add(reader["To_Name"]);
                // listBox1.Items.Add(reader[0].ToString());
                // MessageBox.Show(reader[0].ToString());
            }
            reader.Close();
            comboBox1.SelectedIndex = 0;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            conn.Close();
        }
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        MessageBox.Show(comboBox1.SelectedValue.ToString());
    }

MessageBox.Show(comboBox1.SelectedValue.ToString());Линия показывает:

" comboBox1 . SelectedIndex = 0 ; "

Но меня удивляет, что значение по индексу 0 установлено в поле со списком, в то время как форма загружается после этого сообщения со ссылкой на объект.

c#,winforms,combobox,visual-studio-2005,

2

Ответов: 4


0 принят

Вы можете попробовать поместить это утверждение при загрузке страницы и убедиться, что в поле со списком загружены элементы или нет ??

comboBox1.SelectedIndex = 0; 

если вы используете winforms, попробуйте поместить этот оператор в функцию initializecomponent ()

"Object reference not set to an instance of an object for combo box".

Means one or two things normally.
combobox not initialized to null;
or combobox not initalized to new

ComboBox combobox = null;
then inside of the try set the combobox variable to an instance of new like the following 
Try
{
  combobox = new Combobox();
}

Прежде всего, вы не должны явно устанавливать для выбранного индекса значение 0. Это 0 по умолчанию. Есть вероятность, что после выполнения программы чтения из базы данных ничего не загружается, и, следовательно, источник данных в выпадающем списке равен нулю. В этом случае, если вы попытаетесь установить для выбранного индекса значение 0, исключение нулевой ссылки будет сгенерировано, поскольку инфраструктура попытается получить первый элемент в источнике данных, который является нулевым. В этом случае выбранный вами индекс должен быть -1.

Таким образом, если вы хотите, чтобы выбранный индекс был первым элементом в списке, я бы не стал явно устанавливать выбранный элемент. Это стандартное поведение для выпадающего списка.


Во-первых, вы пытались использовать отладчик, чтобы проверить, действительно ли читатель помещает что-нибудь?

Я заметил, что вы использовали заглавную букву «To_Name» в читателе, но не в предложении where - вы уверены, что он не чувствителен к регистру?

Во-вторых, поскольку вы работаете с базами данных, более простым способом было бы вернуть результат из db-функции в DataTable, а затем использовать привязку данных.


C #, WinForms, выпадающий, зрительно-студия-2005,
Похожие вопросы