在一个下拉列表框里已经有一项被默认选中,现在我是利用从数据库返回的记录来修改
其被选中项。代码如下:
SqlCommand mycomm = new SqlCommand("select 游戏ID,职业,性别,种族,主修天赋,商业技能1,商业技能2,QQ号码,手机号码,其他 from DATALIST",Mycon);
Mycon.Open();
SqlDataReader Fill = mycomm.ExecuteReader();
Fill.Read();
TexID.Text=Fill["游戏ID"].ToString();
DDLZhiye.SelectedItem.Selected = false;
DDLZhiye.Items.FindByText(Fill["职业"].ToString()).Selected = true;
Mycon是我定义的数据连接。
DDLZhiye是下拉列表框。
我先用DDLZhiye.SelectedItem.Selected = false;把默认的选中项取消,
再用DDLZhiye.Items.FindByText(Fill["职业"].ToString()).Selected = true;设置新的选中项,
但是提示我 错误:未将对象引用设置到对象的实例
如果我把这句换成DDLZhiye.Items.FindByText(“战士”).Selected = true;就没有问题。
但是这里我需要的是用变量,不是用常量啊。
求各位老大稍微指点下,谢谢拉!另外再请问下如何指定DATAGRID中某条记录的某项或者某列为可编辑,而不是整条记录可编辑。
datagrid是自动生成的。
其被选中项。代码如下:
SqlCommand mycomm = new SqlCommand("select 游戏ID,职业,性别,种族,主修天赋,商业技能1,商业技能2,QQ号码,手机号码,其他 from DATALIST",Mycon);
Mycon.Open();
SqlDataReader Fill = mycomm.ExecuteReader();
Fill.Read();
TexID.Text=Fill["游戏ID"].ToString();
DDLZhiye.SelectedItem.Selected = false;
DDLZhiye.Items.FindByText(Fill["职业"].ToString()).Selected = true;
Mycon是我定义的数据连接。
DDLZhiye是下拉列表框。
我先用DDLZhiye.SelectedItem.Selected = false;把默认的选中项取消,
再用DDLZhiye.Items.FindByText(Fill["职业"].ToString()).Selected = true;设置新的选中项,
但是提示我 错误:未将对象引用设置到对象的实例
如果我把这句换成DDLZhiye.Items.FindByText(“战士”).Selected = true;就没有问题。
但是这里我需要的是用变量,不是用常量啊。
求各位老大稍微指点下,谢谢拉!另外再请问下如何指定DATAGRID中某条记录的某项或者某列为可编辑,而不是整条记录可编辑。
datagrid是自动生成的。
解决方案 »
- 求一关于标签查找替换的正则表达式..急用.在线等待!
- 装个控制网速的系统哪里有啊,怎么装啊
- 动态创建的textbox 如何取得值?
- 服务器中放多个网站,如何解决地址问题???
- 关闭页面问题
- 在DataGrid进入“编辑”状态时,如何从客户端进行验证,要求用户在编辑时只能在编辑框中输入数字类型?
- 为何只显示标签控件“请输入您的姓名:”,没有按钮显示呢
- 请问各位在使用asp.net menu 的时候怎么使菜单项的文字显示在中间???/
- asp.net运行环境的问题
- 安装后的web应用程序不能更新?
- 关于DataGrid的Items问题??(WebForm中)谢谢大家了!!!!!
- 我发了好几次,也没人理我,请帮帮忙吧!关于邮件的问题
DDLZhiye.DataTextField="职业";
DDLZhiye.DataValueField="职业";
DDLZhiye.DataBind();
假如:TextBox1.Text="战士";
DDLZhiye.Items.FindByText(TextBox1.Text)Selected = true;
但是提示我 错误:未将对象引用设置到对象的实例
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~````
首先,DDLZhiye.SelectedItem.Selected = false;这句根本不需要然后,出现上面的提示,说明“职业”这个字段可能存在空,也就是查出来是dbnull的格式。
需要先转化一下,你先判断它是不是dbnull,如果是,处理一下,不是在直接附值。
用来改变下拉列DDLZhiye中的被选中项目
(里面有好几个选项,默认的是 战士,但比如记录返回 法师,我就需要把被选中项设为 法师)
所以这句是没有变化的
DDLZhiye.Items.FindByText(Fill["职业"].ToString()).Selected = true;在增加这4句后
DDLZhiye.DataSource=Fill;
DDLZhiye.DataTextField="职业";
DDLZhiye.DataValueField="职业";
DDLZhiye.DataBind();出错提示是:在没有任何数据时进行无效的读取尝试
如果取消DDLZhiye.DataBind();这句,
错误提示还是原来的:未将对象引用设置到对象的实例
DataBind()会把SqlDataReader对象中的数据清空吗?
修改的代码如下:
if(IsPostBack == false)
{
SqlCommand mycomm = new SqlCommand("select 游戏ID,职业,性别,种族,主修天赋,商业技能1,
商业技能2,QQ号码,手机号码,其他 from DATALIST
where 用户名='"+Session["Name"].ToString ()+"'",Mycon);
Mycon.Open();
SqlDataReader Fill = mycomm.ExecuteReader();
DDLZhiye.DataSource=Fill;
DDLZhiye.DataTextField="职业";
DDLZhiye.DataValueField="职业"; DDLZhiye.DataBind();
Fill.Read();
TexID.Text=Fill["游戏ID"].ToString(); //错误行:在没有任何数据时进行无效的读取尝试
DDLZhiye.Items.FindByText(Fill["职业"].ToString()).Selected = true;
//在原来的代码里出现错误的行:未将对象引用设置到对象的实例 Fill.Close();
Mycon.Close();
}
但是在我最开始的代码里只要去掉
DDLZhiye.Items.FindByText(Fill["职业"].ToString()).Selected = true;
这个出错行,就能顺利运行
另外数据库里在这个字段上是设置了非空限制的,“职业”字段肯定不是空的
1.由于你是SqlDataReader ,所以,一旦该字段内容为null时,对它取值,即会出现错误.所以,取值前必须先判断该值是否为空:
if(Fill("") != null)
{}
else
{}
2.在下拉框中,以下语句
DDLZhiye.Items.FindByText(Fill["职业"].ToString())
求取出来的,是一个listitem对象,假设当前下拉框选项中没有对应的选项,则其值为null,如果在null的情况下,对它做任何设置,均出现错误.
所以,你应修改如下:
if(DDLZhiye.Items.FindByText(Fill["职业"].ToString()) != null)
{
DDLZhiye.Items.FindByText(Fill["职业"].ToString()).Selected = True;
}具体修改如下:Mycon.Open();
SqlDataReader Fill = mycomm.ExecuteReader();
if(Fill.Read())
{
if(Fill["职业"]!=null)
{
//TexID.Text=Fill["游戏ID"].ToString();
//DDLZhiye.SelectedItem.Selected = false;
ListItem myitem = DDLZhiye.Items.FindByText(Fill["职业"].ToString());
if(myitem != null)
{
myitem.Selected = true;}
}
}
这么说吧,我吧最开始的代码里出错的这句:
DDLZhiye.Items.FindByText(Fill["职业"].ToString()).Selected = true;
改成
TexID.Text=Fill["职业"].ToString();
就能顺利运行。
就是说SqlDataReader的“职业”字段肯定不是空的,
下拉列表框里也肯定有对应的项。
说精确点:
DDLZhiye.Items.FindByText(Fill["职业"].ToString());
这句代码都不会出错
出错就只在后面的.Selected = true上:
DDLZhiye.Items.FindByText(Fill["职业"].ToString()).Selected = true;
//错误:未将对象引用设置到对象的实例
运行这句:
TexID.Text=Fill["职业"].ToString();
结果就能清楚的显示出来,值是肯定有地,再和下列表里的项对比,这个值也是存在地。
运行这句:
if(DDLZhiye.Items.FindByText(Fill["职业"].ToString()) != null)
结果就是false,我只能说我没语言了!
明明直和字段都存在,他就是找不出东西来