asp.net – 不能从代码隐藏在FormView上加载DropDownList?
我有一个UserControl,包含一个FormView,包含一个DropDownList.
FormView绑定到数据控件. 像这样: <asp:FormView ID="frmEdit" DataKeyNames="MetricCode" runat="server" DefaultMode="Edit" DataSourceID="llbDataSource" Cellpadding="0" > <EditItemTemplate> <asp:DropDownList ID="ParentMetricCode" runat="server" SelectedValue='<%# Bind("ParentMetricCode") %>' /> </EditItemTemplate> <asp:FormView> 我试图从代码隐藏填充DropDownList.如果这不包含在FormView中,我通常只会在Page_Load事件中执行此操作.但是,这在FormView中不起作用,因为一旦我尝试这样做,访问代码中的下拉列表,即: theListcontrol = CType(formView.FindControl(listControlName),ListControl) …调用FormView的数据绑定机制,当然,它试图将DropDownList绑定到底层数据源,导致**’ParentMetricCode’具有一个无效的SelectedValue,因为它在列表中不存在项目. “参数名称:值…”错误,因为尚未填充DropDownList. 我尝试在FormView的DataBinding()事件中执行加载,但随后: theListcontrol = CType(formView.FindControl(listControlName),System.Web.UI.WebControls.ListControl) …失败,因为那时FormView.Controls.Count = 0. 这不可能吗? (我不想使用辅助ObjectDataSource来绑定下拉列表) 解决方法
直接在DropDownList上实现OnDataBinding.
将formview绑定到某些数据时,将触发DropDownList的OnDataBinding.此时,您可以将所需的值加载到列表中,并将所选值绑定到加载的列表. 这是一个例子: <asp:DropDownList ID="ParentMetricCode" runat="server" OnDataBinding="ParentMetricCode_DataBinding" /> 然后实现OnDataBinding: protected void ParentMetricCode_DataBinding(object sender,System.EventArgs e) { DropDownList ddl = (DropDownList)(sender); // Fill the list items however you want ddl.Items.Add(new ListItem("1","1")); ddl.Items.Add(new ListItem("2","2")); // etc... // Set the selected value ddl.SelectedValue = Eval("ParentMetricCode").ToString(); } 当DataBind你的FormView时,一切都会开始发挥它的魔力:) 此外,如果您从数据库或某些内容加载DropDownList的列表数据,您可能希望对其进行缓存,因为每个“行”数据都会导致加载列表数据. 编辑: 在您的aspx文件中包括: <asp:FormView ID="fvTest" runat="server"> <ItemTemplate> <asp:DropDownList ID="ddlTest" runat="server" OnDataBinding="ddlTest_DataBinding"></asp:DropDownList> </ItemTemplate> </asp:FormView> 然后在你的.cs文件中: public class MockData { public string ID { get; set; } public string Text { get; set; } } protected void Page_Load(object sender,EventArgs e) { List<MockData> lst = new List<MockData>(); lst.Add(new MockData() { ID = "3",Text = "Test3" }); fvTest.DataSource = lst; fvTest.DataBind(); } protected void ddlTest_DataBinding(object sender,System.EventArgs e) { DropDownList ddl = (DropDownList)(sender); ddl.Items.Add("1"); ddl.Items.Add("2"); ddl.Items.Add("3"); ddl.Items.Add("4"); ddl.Items.Add("5"); ddl.SelectedValue = Eval("ID").ToString(); } 运行代码… DropDownList将加载所有值,并设置为在模拟对象中设置的正确选定值. 不知道我还能做些什么来证明它更好……我认为你错过了DataBinding的实际工作方式.如果您尝试在FormView级别执行此操作,则在实际绑定FormView之前不会生成控件.当绑定发生时,您可以通过实现它的OnDataBinding事件来触发模板中的每个控件来执行某些操作.此时,绑定对象的当前迭代及其值是可用的,您可以在其中看到我的代码执行Eval(“ID”). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 是否有基于.NET的中央身份验证服务实现?
- asp.net-mvc – MVC的实际应用||什么时候使用,还是不使用MV
- asp.net – 如何在我的代码中使用接口使其更加scalabale?
- asp.net-mvc-2 – 基于两个属性的自定义模型验证.一个影响另
- asp.net – Mono有什么不适合的东西?
- 使用WebAPI进行RESTFul身份验证
- asp.net – 如何解决ASP .Net中的“这是一个无效的webresou
- ASP.NET会话状态在异常后丢失
- asp.net-mvc – ASP.NET MVC中的UserManager.FindByNameAsy
- asp.net-mvc – 没有注册默认实例,无法自动确定类型
- asp.net – ASP .NET MVC 3.会话过期太快了
- asp.net-core – 入口点没有合适的“程序”类型
- asp.net-mvc – ASP.NET MVC路由:如何定义自定义
- asp中select(下拉菜单)如何同时获取value和text的
- .Net Core微服务入门全纪录(七)——IdentitySe
- asp.net – DBMS如何影响应用程序性能?和Inform
- 如果复选框被选中,ASP.NET – 需要一个文本框
- c#获取当前应用程序所在路径
- asp.net-mvc – 使用MVCContrib格式进行编辑
- asp.net – VS2010中新的asp“showat”属性要求不