C# 对象引用未设置为对象的实例;

C# 对象引用未设置为对象的实例;,c#,object-reference,C#,Object Reference,我正在数据库的列表框中插入值&点击按钮检索文本。但是我得到了以下错误 对象引用未设置为实例 对象的 所以“selecteditem.text”不会在所选项目上获取任何值 String selectemail = "select email_id from [property].[dbo].[user_membership]"; SqlCommand cmd = new SqlCommand(selectemail, con); cmd.Connection.Open(); ListBox1.D

我正在数据库的列表框中插入值&点击按钮检索文本。但是我得到了以下错误

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

所以“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);
   ...
}

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

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

这将为您停止错误:

//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);
}
看起来这只是用户没有在
列表框1
中选择任何内容的问题

编辑


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

    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

这将为您停止错误:

//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);
}
看起来这只是用户没有在
列表框1
中选择任何内容的问题

编辑


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

    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

调试时,哪个项返回null?放置调试标记并运行代码-是否为ListBox1.SelectedItem?item.Text=ListBox1.SelectedItem.Text;如果从数据库插入数据,则无法获取ListBox1.SelectedItem.Text。但是,如果手动插入,则获取值…您的数据绑定是否在每次回发时都执行?您的代码中有(!IsPostBack)吗?如果是这样,请删除它并重试-确保数据也始终在回发时绑定。调试时,哪个项返回null?放置调试标记并运行代码-是否为ListBox1.SelectedItem?item.Text=ListBox1.SelectedItem.Text;如果从数据库插入数据,则无法获取ListBox1.SelectedItem.Text。但是,如果手动插入,则获取值…您的数据绑定是否在每次回发时都执行?您的代码中有(!IsPostBack)吗?如果是,请将其删除并重试-确保回发时也始终绑定数据。如果从数据库插入数据,则ListBox1.SelectedItem.Text不会获取值。但是如果手动插入,则获取值..+1完全正确-只是基本的“防御性编程”原则-在访问对象的属性之前,检查是否为null我正在检查null,因为:if(ListBox1.SelectedItem==null)return;但若从数据库中插入数据,那个么如何从listboxListBox1.SelectedItem.Text中选择文本并没有得到值。但是如果手动插入,则获取值..+1完全正确-只是基本的“防御性编程”原则-在访问对象的属性之前,检查是否为null我正在检查null,因为:if(ListBox1.SelectedItem==null)return;但是如何从列表框中选择文本呢