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

简介: 原文:如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误FormView控件是可及显示、修改、添加、删除为一体的控件,感觉很好用,可是昨天发现了一个可以说是它的一个Bug吧...
原文: 如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误

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

img_a6339ee3e57d1d52bc7d02b338e15a60.gif          < asp:DropDownList  ID ="DropDownList2"  runat ="server"  DataSourceID ="SqlDataSource2"
img_a6339ee3e57d1d52bc7d02b338e15a60.gif            DataTextField
="校区简称"  DataValueField ="校区代码" AutoPostBack="true" >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
</ asp:DropDownList >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
< asp:DropDownList  ID ="DropDownList3"  runat ="server"  DataSourceID ="SqlDataSource3"
img_a6339ee3e57d1d52bc7d02b338e15a60.gif            DataTextField
="楼名称"  DataValueField ="楼代码" >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
</ asp:DropDownList >< asp:SqlDataSource  ID ="SqlDataSource3"  runat ="server"  ConnectionString ="<%$ ConnectionStrings:SBGLConnectionString %>"
img_a6339ee3e57d1d52bc7d02b338e15a60.gif            SelectCommand
="SELECT [楼名称], [楼代码] FROM [C_楼名代码表] WHERE ([校区] = @校区)" >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif            
< SelectParameters >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif                
< asp:ControlParameter  ControlID ="DropDownList2"  Name ="校区"  PropertyName ="SelectedValue"
img_a6339ee3e57d1d52bc7d02b338e15a60.gif                    Type
="Int32"   />
img_a6339ee3e57d1d52bc7d02b338e15a60.gif            
</ SelectParameters >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
</ asp:SqlDataSource >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
< asp:SqlDataSource  ID ="SqlDataSource2"  runat ="server"  ConnectionString ="<%$ ConnectionStrings:SBGLConnectionString %>"
img_a6339ee3e57d1d52bc7d02b338e15a60.gif            SelectCommand
="SELECT [校区代码], [校区简称] FROM [C_校区代码表]" ></ asp:SqlDataSource >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
只需要这样就可以了,不用再CS中编写代码
但是把这个代码转移到FormView中就会出错,一般页面第一次载入时时不会出错的,我也不知道为什么,但是如果将校区换了以后就会出现下面的错误

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

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidOperationException: Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。
源错误:

[没有相关的源行]

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

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

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

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

img_a6339ee3e57d1d52bc7d02b338e15a60.gif      private  DropDownList dpl_xiaoqu;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
private  DropDownList dpl_lou;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
protected   void  Page_Load( object  sender, EventArgs e)
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
img_33d02437d135341f0800e3d415312ae8.gif        dpl_xiaoqu 
= (DropDownList)this.fv_ShiYanShi.FindControl("dpl_xiaoqu");
img_33d02437d135341f0800e3d415312ae8.gif        dpl_lou 
= (DropDownList)this.fv_ShiYanShi.FindControl("dpl_lou");
img_33d02437d135341f0800e3d415312ae8.gif        dpl_xiaoqu_SelectedIndexChanged();
img_05dd8d549cff04457a6366b0a7c9352a.gif    }

img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
protected   void  dpl_xiaoqu_SelectedIndexChanged()
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
img_33d02437d135341f0800e3d415312ae8.gif        dpl_lou.Items.Clear();
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif        
this.sqd_lou.SelectParameters["校区"].DefaultValue = this.dpl_xiaoqu.SelectedValue;
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif        DataView datav 
= (DataView)this.sqd_lou.Select(DataSourceSelectArguments.Empty);
img_33d02437d135341f0800e3d415312ae8.gif        
foreach (DataRowView dr in datav)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            ListItem li 
= new ListItem();
img_33d02437d135341f0800e3d415312ae8.gif            li.Value 
= dr.Row["楼代码"].ToString();
img_33d02437d135341f0800e3d415312ae8.gif            li.Text 
= dr.Row["楼名称"].ToString();
img_33d02437d135341f0800e3d415312ae8.gif            dpl_lou.Items.Add(li);
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_05dd8d549cff04457a6366b0a7c9352a.gif    }

img_a6339ee3e57d1d52bc7d02b338e15a60.gif
相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
目录
相关文章
|
8月前
|
JavaScript
Vue中如何使用v-model双向数据绑定select、checked等多种表单元素
Vue中如何使用v-model双向数据绑定select、checked等多种表单元素
184 0
|
9月前
|
C#
Blazor嵌套传递
Blazor嵌套传递
42 0
Blazor嵌套传递
|
前端开发 JavaScript
element组件的属性、事件和方法怎么使用
我们在使用element组件的时候,经常会使用到组件的属性、事件和方法,但对于第一次接触element组件的小白来说,由于没有代码示例,所以不知道怎么使用组件的属性、事件和方法是很常见的情况,所以本文将教会大家怎么去使用element组件的属性、事件和方法
297 0
element组件的属性、事件和方法怎么使用
|
JavaScript
element-ui中下拉command传递多参数事件封装
element-ui中下拉command传递多参数事件封装
446 0
element-ui中下拉command传递多参数事件封装
|
JSON JavaScript 数据格式
基于 el-form 封装一个依赖 json 动态渲染的表单控件
先介绍功能,然后演示功能,最后介绍思路和编码方式。
400 0
基于 el-form 封装一个依赖 json 动态渲染的表单控件
|
JSON 数据格式
基于el-form封装一个依赖 json 动态渲染的表单控件(一)
先介绍功能,然后演示功能,最后介绍思路和编码方式。
基于el-form封装一个依赖 json 动态渲染的表单控件(一)
|
JSON JavaScript 数据格式
基于el-form封装一个依赖 json 动态渲染的表单控件(二)
先介绍功能,然后演示功能,最后介绍思路和编码方式。
基于el-form封装一个依赖 json 动态渲染的表单控件(二)
Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象
原文:Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象 原创文章,如需转载,请注明出处。   最近在一直研究Silverlight下的数据绑定控件,发现有这样两个接口IEditableObject 和IEditableCollectionView,记录一下结论,欢迎交流指正。
837 0
|
C#
WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果
原文:WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果   本以为Label也有TextChanged 事件,但在使用的时候却没找到,网友说Label的Content属性改变肯定是使用赋值操作,赋值的时候就可以对其进行相应的操作所以不需TextChanged 事件。
1951 0
|
C# 存储
数据绑定(一)一个简单的例子
原文:数据绑定(一)一个简单的例子 控件是用来展示数据的,而不是用来存储数据的 如果把Binding比作数据的桥梁,那么它的两端分别是Binding的源(Source)和目标(Target),数据从哪里来哪里就是源,Binding就是加载中间的桥梁,Binding目标就是数据要到哪儿去,一般情况下,Binding源是逻辑层的对象,Binding目标是UI层的控件对象,这样,数据就会源源不断通过Binding送到UI层,也就完成了数据驱动UI的过程。
650 0

热门文章

最新文章