dropdownlist 绑定到数据库不存在的记录

现象:我有一个像字典表一样的表,他不属于字典表,他是方便客户录入的,里面有一些值,这些值是直接写进别的表里的,在这个表更新的时候,已经写入到别的表里面的值是不会跟着更新的

这个表里的记录,用户可以随时添加修改删除,他在整个系统里,没有数据完整性的要求,他只是用来给一些打字很慢的用户提供方便用的

在录入修改数据的时候,有些字段要用到这个表,使用的是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;
        }

 

转载于:https://www.cnblogs.com/wangyingtao/archive/2008/06/07/1215488.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值