问题描述
在listbox中,里面显示的文字只能点击第一个(只有一列),之前运行都没问题,但双击listbox出现事件在里面写代码后就出现此问题,新写的代码注释掉问题依旧存在。以下是代码:privatevoidForm药品名称查询_Load(objectsender,EventArgse){List<string>list=newList<string>();DataSetds=newDataSet();stringsqlstr="select*fromdrugName";stringstrAccessConn=ConfigurationSettings.AppSettings["Constr"];OleDbDataReaderdr;OleDbConnectionmyAccessConn=newOleDbConnection(strAccessConn);OleDbCommandmyAccessCommand=newOleDbCommand(sqlstr,myAccessConn);myAccessConn.Open();dr=myAccessCommand.ExecuteReader();while(dr.Read()){list.Add((string)dr["中文名称"]);}//ds=DataAccess.retSet(sqlstr);this.lstDrugName.DataSource=list;this.lstDrugName.DisplayMember="中文名称";}privatevoidbutton显示_Click(objectsender,EventArgse){stringstr=lstDrugName.SelectedItem.ToString();stringstrr="select药物编码,中文名称,英文名称,别名,适应症,药效学,不良反应fromdrugNamewhere中文名称='"+str+"'";//DataSetds=newDataSet();//ds=DataAccess.retSet(strr);textBox显示窗口.Text="";handlehc=newhandle();OleDbDataReaderdr=hc.selectdn(strr);List<string>list=newList<string>();while(dr.Read()){list.Add("药物编码:");list.Add((string)dr["药物编码"]);list.Add("中文名称:");list.Add((string)dr["中文名称"]);list.Add("英文名称:");list.Add((string)dr["英文名称"]);list.Add("别名:");if(dr["别名"]==System.DBNull.Value){list.Add("");}else{list.Add((string)dr["别名"]);}list.Add("适应症:");list.Add((string)dr["适应症"]);list.Add("药效学:");if(dr["药效学"]==System.DBNull.Value){list.Add("");}else{list.Add((string)dr["药效学"]);}list.Add("不良反应:");list.Add((string)dr["不良反应"]);}for(inti=0;i<list.Count;i++){textBox显示窗口.Text+=list[i]+"rn"+"rn";}textBox疾病名称.Text=list[3].ToString();textBox英文名称.Text=list[5].ToString();}
解决方案
解决方案二:
不清楚LZ说的意思不读是没数据。。还是报错了。。睡觉去了。。困了。。
解决方案三:
帮顶
解决方案四:
可能是没有数据在DataReader对象的Read方法读取数据之前,应该使用DataReader对象的HasRows方法判断一下是否有数据if(dataReader.HasRows){while(dataReader.Read()){}}
解决方案五:
个人估计这句也有问题this.lstDrugName.DisplayMember="中文名称";