【问题标题】:Object reference not set to instance of object"对象引用未设置为对象实例”
【发布时间】:2011-03-21 11:50:18
【问题描述】:

我正在从数据库中的列表框中插入值并在单击按钮时检索文本。但我收到以下错误

对象引用未设置为实例 对象

所以“selecteditem.text”在所选项目上没有得到任何值...

String selectemail = "select email_id from [property].[dbo].[user_membership]";
SqlCommand cmd = new SqlCommand(selectemail, con);
cmd.Connection.Open();

ListBox1.DataSource = cmd.ExecuteReader();
ListBox1.DataTextField = "Email_ID"; 
ListBox1.DataBind();  

//on button click//       
protected void Button1_Click1(object sender, EventArgs e)
{
   ListItem item = new ListItem();
   item.Text = ListBox1.SelectedItem.Text;(error comes here)
   ListBox2.Items.Add(item.Text);
   ListBox1.Items.Remove(item.Text);
   ...
}

【问题讨论】:

    标签: c# object-reference


    【解决方案1】:

    这将为您停止错误:

    //on button click//       
    protected void Button1_Click1(object sender, EventArgs e)
    {
            if (ListBox1.SelectedItem == null) return;
    
            ListItem item = new ListItem();
            item.Text = ListBox1.SelectedItem.Text;(error comes here)
            ListBox2.Items.Add(item.Text);
            ListBox1.Items.Remove(item.Text);
    }
    

    看起来这只是用户没有在您的ListBox1 中选择任何内容的问题。

    编辑


    我将一个测试应用程序放在一起进行检查,这对我来说很好:

        var dt = New DataTable()
        dt.Columns.Add("email_id");
    
        dt.Rows.Add("first");
        dt.Rows.Add("second");
        dt.Rows.Add("thrid");
        dt.Rows.Add("fourth");
    
        var lst = New System.Web.UI.WebControls.ListBox;
    
        lst.DataSource = dt;
        lst.DataTextField = "Email_ID";
        lst.DataBind();
    
        //lst.SelectedItem is null here
        lst.SelectedIndex = 1;
    
        //lst.SelectedItem is NOT null here
    

    【讨论】:

    • ListBox1.SelectedItem.Text 如果从数据库中插入数据,则不会获得价值。但如果手动插入会获得价值..
    • +1 完全正确 - 只是基本的“防御性编程”原则 - 在访问对象的属性之前,检查 NOT NULL
    • 我正在检查 null 为:if (ListBox1.SelectedItem == null) return;
    • 但是如何从列表框中选择文本
    【解决方案2】:

    调试代码,但很可能不存在的对象是 ListBox1 控件,或者当按下按钮时 ListBox1 控件实际上没有选择项目。

    【讨论】:

    • 调试的时候,返回null的是哪个item?放置一个调试标记并运行您的代码 - 它是 ListBox1.SelectedItem 吗?
    • item.Text = ListBox1.SelectedItem.Text;
    • ListBox1.SelectedItem.Text 如果从数据库中插入数据,则无法获取。但是如果手动插入就会获得价值......
    • 您的数据绑定,是否在每次回发时执行?您的代码中有 (!IsPostBack) 吗?如果是这样,请将其删除并重试 - 确保数据也始终在回发时绑定。
    最近更新 更多