对象引用未设置为组合框的对象实例

时间:2011-10-16 06:33:29

标签: c# winforms combobox visual-studio-2005

我看到许多对象引用没有设置为对象问题的实例,但我找不到任何方案。

我有一个名为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());行显示:

  

“对象引用未设置为组合框对象的实例”。

但令我惊讶的是,在此对象引用msg框后加载表单时,索引0的值设置为组合框。

4 个答案:

答案 0 :(得分:0)

您可以尝试将此语句置于页面加载状态并确保组合框已加载项目吗?

comboBox1.SelectedIndex = 0; 

如果您使用的是winforms,请尝试将该语句放在initializecomponent()函数

comboBox1.SelectedIndex = 0; 

答案 1 :(得分:0)

首先,您不要明确地将所选索引设置为0。默认为0。执行阅读器后,有可能没有从数据库加载任何内容,因此组合框的DataSource为null。在这种情况下,如果您尝试将所选索引设置为0,则在框架尝试检索数据源中为null的第一个项时,将引发空引用异常。在这种情况下,您选择的索引应为-1。

因此,如果您希望所选索引成为列表中的第一项,我将不会显式设置所选项。这是组合框的默认行为。

答案 2 :(得分:0)

首先,您是否尝试使用调试器检查读者是否实际放置了什么?

我注意到你在阅读器中大写“To_Name”而不是在where子句中 - 你确定它不区分大小写吗?

其次,由于您正在使用数据库,因此更简单的方法是将db结果函数返回到DataTable中,然后使用数据绑定。

答案 3 :(得分:0)

"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();
}