private void listView1_SelectedIndexChanged(object sender, EventArgs e)//----------------------------------listView1选中一项显示到lable中---------------------------------
        {
            try
            {
                if (listView1.SelectedItems.Count > 0)
                {
                    if (dbconn.State != ConnectionState.Open)
                    {
                        dbconn.Open();
                    }
                    this.label4.Text = "";
                    string strSql = "select * from table1 where ID='%" + listView1.SelectedItems[0].Tag.ToString() + "%'";
                    OleDbCommand oledbCom = new OleDbCommand(strSql, dbconn);
                    OleDbDataReader rd = oledbCom.ExecuteReader();                    if (rd.Read()) //如果oledbDR.Read()读取内容不为空,则继续。注意下,每执行一条oledbDR.Read(),oledbDR会自动转到下一条信息
                    {
                        ID = Convert.ToInt32(rd["ID"]);
                        this.label4.Text = rd["question"].ToString();
                        this.label5.Text = rd["answer"].ToString();                    }
                    rd.Close();    //必须关闭OleDbDataReader
                    dbconn.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }如果这样写就会提示未将对象引用设置到对象的实例,请问是什么情况?小弟第一次写access数据库的东西,对这个不是很了解,望各位大大指教C# accesslistviewlabel

解决方案 »

  1.   

    listView1.SelectedItems[0].Tag.ToString() 这个没有取到值.tag应该是null
      

  2.   

    listView1.SelectedItems[0]是一个对象,你绑定的是一个数据表,所以应该是一个datarow,你可以这样用
    ((DataRow)listView1.SelectedItems[0])["question"]。ToString();//其中question为字段名,楼主可以试一试
      

  3.   

    当然,用之前可以先尝试判断一下Type,看是不是DataRow
      

  4.   

    學會看異常的提示,提示寫的很清楚,調用方法前,檢查是否為NULL
    你可以在sql語句之前先判斷Listview.selecteditems[0].tag是否為空,然後再考慮拼接字符串
    你這個寫法其實不妥...
      

  5.   

    不好意思,请问具体在哪里改,我把
    listView1.SelectedItems[0].Tag.ToString()
    这一句替换掉不行,对于这个DataRow我不是很熟练,见谅