Ссылка на объект не установлена ​​на экземпляр объекта для поля со списком - PullRequest
2 голосов
/ 16 октября 2011

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

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

  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()); показывает:

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

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

Ответы [ 4 ]

0 голосов
/ 16 ноября 2011
"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 голосов
/ 16 октября 2011

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

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

0 голосов
/ 16 октября 2011

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

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

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

0 голосов
/ 16 октября 2011

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

comboBox1.SelectedIndex = 0; 

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

comboBox1.SelectedIndex = 0; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...