如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误

原文:如何解决FormView中实现DropDownList连动选择时出现
"Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误

FormView控件是可及显示、修改、添加、删除为一体的控件,感觉很好用,可是昨天发现了一个可以说是它的一个Bug吧,我是想要实现下拉框的联动效果,比如在A下拉框选择了省对应B的下拉框会把对应A中省的市显示在B下拉框中,我想要实现的是校区和对应校区建筑的联动效果,单纯的这种效果很好实现比如下面的代码

        <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource2"
            DataTextField="校区简称" DataValueField="校区代码" AutoPostBack="true">
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="SqlDataSource3"
            DataTextField="楼名称" DataValueField="楼代码">
        </asp:DropDownList><asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:SBGLConnectionString %>"
            SelectCommand="SELECT [楼名称], [楼代码] FROM [C_楼名代码表] WHERE ([校区] = @校区)">
            <SelectParameters>
                <asp:ControlParameter ControlID="DropDownList2" Name="校区" PropertyName="SelectedValue"
                    Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:SBGLConnectionString %>"
            SelectCommand="SELECT [校区代码], [校区简称] FROM [C_校区代码表]"></asp:SqlDataSource>

只需要这样就可以了,不用再CS中编写代码
但是把这个代码转移到FormView中就会出错,一般页面第一次载入时时不会出错的,我也不知道为什么,但是如果将校区换了以后就会出现下面的错误

Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。


说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidOperationException: Eval()、XPath() 和 Bind()
这类数据绑定方法只能在数据绑定控件的上下文中使用。
源错误:





[没有相关的源行]


而且我还不知道是哪行错了,上网查了查,也有好多人问,但是没有人能给人正确或者说比较好的答案,我找了半天也没有找到解决办法,看来只能自己试一试了,差不多用了半天时间吧我已经能够实现想要实现的效果了,下面是我的代码,还请大家指点,哪如果有不足的地方请多指点

在ASPX文件中进行添加一个GridView然后对插入模板进行编辑实现校区下拉菜单和楼名的连动效果,这里需要注意以下几点:
1要实现连动要把校区下拉框的AutoPostBack属性设置为true;
2校区下拉框所对应的数据源孔件必须放在FormView里,否则回报错,找不到数据源
3对应校区的楼的下拉框的数据源空间要放到FormView的外面,实际上数据源和楼名下拉框基本上没有什么关系了,只是通过数据源获取数据然后把数据传递给DropDownList


        <asp:FormView ID="fv_ShiYanShi" runat="server" DefaultMode="Insert" Width="437px">
            <InsertItemTemplate>
                <asp:DropDownList ID="dpl_xiaoqu" runat="server" AutoPostBack="True" DataSourceID="sqd_xiaoqu"
                    DataTextField="校区简称" DataValueField="校区代码" SelectedValue=‘<%# Bind("校区") %>‘
                    Width="200px">
                </asp:DropDownList><asp:SqlDataSource ID="sqd_xiaoqu" runat="server" ConnectionString="<%$ ConnectionStrings:SBGLConnectionString %>"
                    SelectCommand="SELECT [校区代码], [校区简称] FROM [C_校区代码表]"></asp:SqlDataSource>
                <asp:DropDownList ID="dpl_lou" runat="server" SelectedValue=‘<%# Bind("所在楼名") %>‘ Width="200px">
                </asp:DropDownList>
            </InsertItemTemplate>
        </asp:FormView>
        <asp:SqlDataSource ID="sqd_lou" runat="server" ConnectionString="<%$ ConnectionStrings:SBGLConnectionString %>"
            SelectCommand="SELECT [楼代码], [楼名称], [校区] FROM [C_楼名代码表] WHERE ([校区] = @校区)" DataSourceMode="DataSet">
            <SelectParameters>
                <asp:Parameter Name="校区" Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:SBGLConnectionString %>"
            SelectCommand="SELECT [楼代码], [楼名称] FROM [C_楼名代码表] WHERE ([校区] = @校区)" DataSourceMode="DataSet">
            <SelectParameters>
                <asp:Parameter Name="校区" Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:DropDownList ID="DropDownList1" runat="server">
        </asp:DropDownList>


在对应的CS文件中这样进行处理


    private DropDownList dpl_xiaoqu;
    private DropDownList dpl_lou;

    protected void Page_Load(object sender, EventArgs e)
    {
        dpl_xiaoqu = (DropDownList)this.fv_ShiYanShi.FindControl("dpl_xiaoqu");
        dpl_lou = (DropDownList)this.fv_ShiYanShi.FindControl("dpl_lou");
        dpl_xiaoqu_SelectedIndexChanged();
    }
    protected void dpl_xiaoqu_SelectedIndexChanged()
    {
        dpl_lou.Items.Clear();

        this.sqd_lou.SelectParameters["校区"].DefaultValue = this.dpl_xiaoqu.SelectedValue;

        DataView datav = (DataView)this.sqd_lou.Select(DataSourceSelectArguments.Empty);
        foreach (DataRowView dr in datav)
        {
            ListItem li = new ListItem();
            li.Value = dr.Row["楼代码"].ToString();
            li.Text = dr.Row["楼名称"].ToString();
            dpl_lou.Items.Add(li);
        }
    }

如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind()
这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误

时间: 2024-12-23 20:03:15

如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误的相关文章

记一次解决cmd中执行java提示&quot;找不到或无法加载主类&quot;的问题

今天遇到一个问题:在cmd命令行中,用javac编译java文件可以成功,但是用java执行却提示"找不到或无法加载主类".现将该问题的原因以及解决办法记录一下. 先理解一下系统变量path和classpath的作用. path:可执行命令的搜索路径,在该路径下搜索可以运行的程序或批处理文件. 命令行中输入一个命令,则会在path配置的目录中查找该命令,如果存在则调用该程序运行,如果不存在则提示" 'XXX' 不是内部或外部命令,也不是可运行的程序或批处理文件."

Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) --------------------------------------------------------------------------------引用或转载时请保留以下信息:大可山?[MSN:a3news(AT)hotmail.com] http://www.zpxp.com?http://www.brawdraw.com萝卜鼠在线图形图像处理

解决v-for中遍历多个el-select时,下拉选择框同步选择问题

当v-for遍历多个el-select时,由于v-model绑定的值为同一个,导致下拉选择时多个下拉选择框同步选择问题 如图是v-model绑定的同一个seatValue数据: 解决办法: 一.为el-select绑定不同的v-mode值,将v-for传递的index值绑定在v-model的参数上( v-model="seatValue[index]" ) 二.通过axios获取数据时,创建一个新的seatValue空数组,通过map遍历获取到的fourthContentArr里的每一

QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)

QT中获取选中的radioButton的两种方法 QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioButton* pbtn = qobject_cast<QRadioButton*>(ui->BG->checkedButton()); 2 QString name = pbtn->objectName(); 3 if(!QString::compare(name, "rad

(转).NET 4.5中使用Task.Run和Parallel.For()实现的C# Winform多线程任务及跨线程更新UI控件综合实例

http://2sharings.com/2014/net-4-5-task-run-parallel-for-winform-cross-multiple-threads-update-ui-demo 在C# WINFORM的开发中,难免会遇到多线程的开发以提高程序的执行效率.自己刚才开始在做多线程的开发时也遇到了很多这方面的问题,比如:如何使用并实现多线程功能.跨线程更新UI控件等问题.还记得最初使用的是System.Threading命名空间下的Thread类来实现的: C# 1 2 3

使用selenium时,使用从系统启动浏览器与通过自动化驱动方式启动浏览器控件ID不一样解决方法

最近遇到一个怪事,通过正常打开浏览器,按照正常的web登录然后点击进入系统流程,将各控件的ID识别成功,然后使用 python3+selenium写好脚本,高高兴兴的用脚本跑时老是提示找不到控件,然后就重新打开浏览器登录重新识别控件,发现识别出来的控件ID又跟之前的不一样,瞬间怀疑是不是自己的眼睛出现视觉疲劳了. 重新关闭所有浏览器重新登录,再次识别该有问题的控件,发现识别出来的控件又跟之前第一次识别出来的一样,但是用脚本跑时还是一如既往的提示找不到该 控件,于是乎就博客园,csdn,stack

Delphi中一些DLL的运用(要传递Application和Screen,似乎还忘了传递提示控件)

dll 调用部分: {****************************************************************} { } { Project: DllDebug } { Copyright(c) 2003, 2005 } { Unit for UCommonUnit } { Create : 2003-01-05 by 林红卫 } { Modify : 2003-01-16 by 林红卫 } { } {***************************

解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题

在一个滑动控件或者是布局里面,添加另外一个可以滑动的控件,通常会造成一些莫名其妙的问题.今天主要介绍在工作中遇到的,在ScrollView布局中嵌套Listview显示不正常,和在Listview中嵌套Listview的滑动冲突的问题. 1.ScrollView布局中嵌套Listview显示不正常的解决方案 目前来说,解决这个问题有好几种解决方案,这里只介绍其中两种比较简单易行的其中两种. (1)自定义一个Listview,继承自Listview,代码如下: public class ListV

在代码中动态创建控件无法保存状态的问题

在网上找了点资料,算是明白了,这是我觉得有帮助的文章: 原文:http://blog.csdn.net/keleloveni/archive/2007/03/15/1530300.aspx 引文: 今天偶然看到有篇文章谈到了相关的问题,终于又解决了一个自己不是很明白的东西. 页面生命周期中的第一个阶段是实例化,在这个阶段中,自动生成的类会根据页面的 HTML 部分中定义的静态控件构建控件层次结构.构造控件层次结构时,声明性语法中指定的值会赋给添加的每个控件的属性.实例化之后是初始化阶段,在这个阶