您所在的位置: 程序员家园 -> 家园博客 ->
 
在哪里摔倒
就在哪里自己爬起来

用户登录

查  找

最新评论

最新留言

常用网站

网易邮箱 GMAIL  

百度搜索 MSDN

霏凡软件 BT精品

影视帝国 射 手 网

电驴下载 全 库 网

友情连接

茄菲的窝 冰冰博客

枫叶飘零 玫  瑰

ACEN 云 豹 子

统  计



模板列里出现“DropDownList 有一个无效 SelectedValue”的解决方法 
狼子 发表于 2006-12-28 19:13:00 阅读全文 | 回复(0) | 引用通告 | 编辑  asp.net查看本站使用过本标签的日志查看本站使用过本标签的用户

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

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

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

发表评论:

    昵称:
    密码:
    主页:
    标题:
Powered by Oblog.