您的位置:首页 > 数据库

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: