将ListBox.SelectedItem.Value和Text赋值给某个变量总是提示
Object reference not set to an instance of an object.
错误!很郁闷, 加 ToString()也不行.
ListBox.SelectedValue也一样问题.
全部代码如下.
谢谢解答!//------------------------------beginning of code-----------------------------------------using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class _Default : System.Web.UI.Page 
{
    DataTable dt = new DataTable();
    DataRow myDataRow;
    
    protected void Page_Load(object sender, EventArgs e)
    {
        BindDataToListBox();
    }    private void BindDataToListBox()
    {
        string conStr = ConfigurationManager.ConnectionStrings["ASPDOTNET"].ConnectionString;
        string cmdText = "SELECT * FROM Users";
        SqlConnection myConnection = new SqlConnection(conStr);
        SqlDataAdapter da = new SqlDataAdapter(cmdText, myConnection);
        da.Fill(dt);
        ListBoxUser.DataSource = dt;
        ListBoxUser.DataTextField = dt.Columns["Uname"].ToString();
        ListBoxUser.DataValueField = dt.Columns["UID"].ToString();
        ListBoxUser.DataBind();
    }
    protected void btnAlter_Click1(object sender, EventArgs e)
    {
        this.Title = ListBoxUser.SelectedValue;
    }
    protected void ListBoxUser_SelectedIndexChanged(object sender, EventArgs e)
    {
        textUage.Text = ListBoxUser.SelectedItem.Text.ToString();
        textUname.Text = "TEST";
    }
}
//------------------------------end of code-----------------------------------------

解决方案 »

  1.   

    ListBoxUser.DataTextField = dt.Columns["Uname"].ToString();
    ListBoxUser.DataValueField = dt.Columns["UID"].ToString();
    --------------
    ListBoxUser.DataTextField = "Uname";
    ListBoxUser.DataValueField = "UID";
      

  2.   

    看看ListBox.SelectedIndex是多少,如果是-1,肯定出这个错误。
      

  3.   

    this.Title = ListBoxUser.SelectedValue;
    改成
    this.Title.Text = ListBoxUser.SelectedValue;
      

  4.   

    ListBoxUser.SelectedItem.Text
    //listBox1.SelectedItem就没有Text属性
      

  5.   

    建议楼主去搜微软的 101 samples
    里面有很详细使用下拉列表等控件的例子
      

  6.   

    上面的大大们, 还是一样问题啊.SelectedIndex确实是 -1
    究竟问题何在啊?!
      

  7.   

    ListBoxUser.DataBind();
    在上面的代码后面加上
    if(ListBoxUser.Items.Count > 0)
    {
        ListBoxUser.SelectedIndex = 0;
    }
    ======================
    接下来,在
    textUage.Text = ListBoxUser.SelectedItem.Text.ToString();
    textUname.Text = "TEST";
    的==前面==加上
    if(ListBoxUser.SelectedIndex == -1)
    {
        return;
    }
      

  8.   

    ListBoxUser.DataSource = dt;  //你先看看dt里面有没有成功取到数据
            ListBoxUser.DataTextField = dt.Columns["Uname"].ToString();
            ListBoxUser.DataValueField = dt.Columns["UID"].ToString();
            ListBoxUser.DataBind();然后改成
    ListBoxUser.DataTextField = "Uname";
    ListBoxUser.DataValueField = "UID";
    ListBoxUser.DataSource = dt;
    ListBoxUser.DataBind();
    试试
      

  9.   

    mobydick 大大, 虽然你加那了那些代码后不出错, 但我想得到ListBoxUser的Value啊.bitpolar大大, 还是不是行啊.
      

  10.   

    我知道你的问题了,关键在于在page_load事件中没有判断是否postback,所以每次都会执行取数据和数据绑定的代码。
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class Default4 : System.Web.UI.Page
    {
        private const string NAME = "Uname";
        private const string UID = "UID";
        protected void Page_Load(object sender, EventArgs e)
        {
            //如果是postback
            if(IsPostBack)
            {
                //返回
                return;
            }
            //下面的代码仅仅在不是postback的时候执行
            DataTable dt = new DataTable();
            //下面的模拟取数据
            dt.Columns.Add(NAME, typeof (string));
            dt.Columns.Add(UID, typeof (int));
            DataRow dr;
            
            for (int i = 0; i < 10; ++i)
            {
                dr = dt.NewRow();
                dr[NAME] = String.Format("Str{0}", i);
                dr[UID] = i;
                dt.Rows.Add(dr);
            }
            //上面的模拟取数据
            
            ListBox1.DataSource = dt;
            //不建议这样写。
            //ListBox1.DataTextField = dt.Columns[NAME].ColumnName;
            //ListBox1.DataValueField = dt.Columns[UID].ColumnName;
            //最好还是使用静态变量
            ListBox1.DataTextField = NAME;
            ListBox1.DataValueField = UID;
            
            ListBox1.DataBind();
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            if(ListBox1.SelectedIndex == -1)
            {
                return;
            }
            Title = ListBox1.SelectedValue;
        }
        protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(ListBox1.SelectedIndex == -1)
            {
                return;
            }
            
            TextBoxName.Text = ListBox1.SelectedItem.Text;
            TextBoxValue.Text = ListBox1.SelectedItem.Value;
        }
    }
      

  11.   

    谢谢mobydick大大, 在您英明的指引下终于解决问题^^(拍拍马屁)