dropdownlist 绑定到数据库不存在的记录
2008-06-07 09:47
127 查看
现象:我有一个像字典表一样的表,他不属于字典表,他是方便客户录入的,里面有一些值,这些值是直接写进别的表里的,在这个表更新的时候,已经写入到别的表里面的值是不会跟着更新的
这个表里的记录,用户可以随时添加修改删除,他在整个系统里,没有数据完整性的要求,他只是用来给一些打字很慢的用户提供方便用的
在录入修改数据的时候,有些字段要用到这个表,使用的是DropDownList控件,在修改数据时,因为那个表的数据是可以随便更新的,所以经常会出现字段的值在那个字典表里不存在的情况,这时就会报错:DropDownList 有一个无效 SelectedValue
我的解决办法:
不要在模版列时直接设置字段的绑定属性
<asp:DetailsView ID="DetailsView3" runat="server" ……>
<EditItemTemplate>
<asp:DropDownList ID="DropDownList19" runat="server" DataSourceID="ObjectDataSource11" DataTextField="FileTitle" DataValueField="FileTitle"></asp:DropDownList>
<asp:Label ID="Label7" runat="server" Text='<%# Eval("FileTitle") %>' Visible="False"></asp:Label>
</EditItemTemplate>
</asp:DetailsView>
看上面这段代码,我在编辑状态下定义了一个DropDownList,一般在模版列里使用DropDownList控件时,我们都会在“编辑DataBindings”对话框里定义绑定到哪个字段的,就是定义
SelectedValue='<%# Bind("字段名") %>'>
Bind是双向绑定,就是数据会自动取出来,更新时也会自动写进数据库,如果是使用Eval方法,是单向绑定,就是数据会自动读取,不会自动更新进数据库,我上面的定义,对Label就使用了Eval方法,因为我只是要把字段的值读取出来使用
为了解决出现“DropDownList 有一个无效 SelectedValue”的问题,在这里,不可以对SelectedValue做绑定的设置
这样呢,DropDownList就是一个用来显示数据的控件了,他不会自动和模版列里的数据挂上勾
现在要处理的是两个地方:
1、刚刚进入编辑状态的时候,要设置DropDownList控件的默认值和字段内容一样,在DetailsView3_DataBound事件里设置就可以了
if (DetailsView3.CurrentMode == DetailsViewMode.Edit)
{
//下拉菜单
string filetitle = "";
Label mylb = new Label();
DropDownList mydl=new DropDownList();
mylb =(Label)DetailsView3.FindControl("Label7");
mydl=(DropDownList)DetailsView3.FindControl("DropDownList19");
if (mylb != null && mydl != null)
{
filetitle = mylb.Text;
ListItem myli = new ListItem();
myli = mydl.Items.FindByValue(filetitle);
if (myli == null)
{
ListItem myli2 = new ListItem(filetitle, filetitle);
mydl.Items.Add(myli2);
mydl.ClearSelection();
myli2.Selected = true;
}
else
{
myli.Selected = true;
}
}
}
这段代码就是借读取Label7的Text,查DropDownList里有没有现在的值,如果没有,就添加一个ListItem项,保证有设置SelectedValue时,DropDownList里这个值,避开出错
2、更新的时候,要把数据写进数据库,在DetailsView3_ItemUpdating事件里设置:
mydl=(DropDownList)DetailsView3.FindControl("DropDownList19");
if (mydl != null)
{
e.NewValues["FileTitle"] = mydl.Items[mydl.SelectedIndex].Value;
}
这个表里的记录,用户可以随时添加修改删除,他在整个系统里,没有数据完整性的要求,他只是用来给一些打字很慢的用户提供方便用的
在录入修改数据的时候,有些字段要用到这个表,使用的是DropDownList控件,在修改数据时,因为那个表的数据是可以随便更新的,所以经常会出现字段的值在那个字典表里不存在的情况,这时就会报错:DropDownList 有一个无效 SelectedValue
我的解决办法:
不要在模版列时直接设置字段的绑定属性
<asp:DetailsView ID="DetailsView3" runat="server" ……>
<EditItemTemplate>
<asp:DropDownList ID="DropDownList19" runat="server" DataSourceID="ObjectDataSource11" DataTextField="FileTitle" DataValueField="FileTitle"></asp:DropDownList>
<asp:Label ID="Label7" runat="server" Text='<%# Eval("FileTitle") %>' Visible="False"></asp:Label>
</EditItemTemplate>
</asp:DetailsView>
看上面这段代码,我在编辑状态下定义了一个DropDownList,一般在模版列里使用DropDownList控件时,我们都会在“编辑DataBindings”对话框里定义绑定到哪个字段的,就是定义
SelectedValue='<%# Bind("字段名") %>'>
Bind是双向绑定,就是数据会自动取出来,更新时也会自动写进数据库,如果是使用Eval方法,是单向绑定,就是数据会自动读取,不会自动更新进数据库,我上面的定义,对Label就使用了Eval方法,因为我只是要把字段的值读取出来使用
为了解决出现“DropDownList 有一个无效 SelectedValue”的问题,在这里,不可以对SelectedValue做绑定的设置
这样呢,DropDownList就是一个用来显示数据的控件了,他不会自动和模版列里的数据挂上勾
现在要处理的是两个地方:
1、刚刚进入编辑状态的时候,要设置DropDownList控件的默认值和字段内容一样,在DetailsView3_DataBound事件里设置就可以了
if (DetailsView3.CurrentMode == DetailsViewMode.Edit)
{
//下拉菜单
string filetitle = "";
Label mylb = new Label();
DropDownList mydl=new DropDownList();
mylb =(Label)DetailsView3.FindControl("Label7");
mydl=(DropDownList)DetailsView3.FindControl("DropDownList19");
if (mylb != null && mydl != null)
{
filetitle = mylb.Text;
ListItem myli = new ListItem();
myli = mydl.Items.FindByValue(filetitle);
if (myli == null)
{
ListItem myli2 = new ListItem(filetitle, filetitle);
mydl.Items.Add(myli2);
mydl.ClearSelection();
myli2.Selected = true;
}
else
{
myli.Selected = true;
}
}
}
这段代码就是借读取Label7的Text,查DropDownList里有没有现在的值,如果没有,就添加一个ListItem项,保证有设置SelectedValue时,DropDownList里这个值,避开出错
2、更新的时候,要把数据写进数据库,在DetailsView3_ItemUpdating事件里设置:
mydl=(DropDownList)DetailsView3.FindControl("DropDownList19");
if (mydl != null)
{
e.NewValues["FileTitle"] = mydl.Items[mydl.SelectedIndex].Value;
}
相关文章推荐
- DropDownList绑定显示数据库多个字段
- 关于DropDownList绑定到数据库中的方法
- DropDownList中的选项是从数据库中绑定的,但是如何在前面添加“请选择”?
- CascadingDropDown从数据库中读取数据绑定到DropDownList控件上
- DropDownList控件绑定数据库
- DropDownList绑定数据库内容
- 通过数据库绑定的dropdownlist,如何让其第一条默认显示"--请选择--"
- DropDownList绑定数据库
- CascadingDropDown从数据库中读取数据绑定到DropDownList控件上
- ASP.NET中DropDownList控件的简单使用--DDL绑定数据库表中值,选择DDL中值直接检索数据
- CascadingDropDown从数据库中读取数据绑定到DropDownList控件上
- 两个DropDownList数据绑定联动(数据库)
- DropDownList绑定数据库中多个字段的值
- DataGrid编辑时让DropDownList绑定数据库中某项表并设置默认选中
- 在ASP.NET MVC中为DropDownList 绑定数据库的值
- 数据库信息绑定DropDownList控件的Item
- ListBox绑定数据库两种方法 dropdownlist
- DropDownList绑定数据库字段
- DataCombo绑定数据库 它还另外增加一项不属入表的记录 如“所有”
- 动态删除与数据库绑定的记录