asp.net Repeater等数据控件模版内部2个DropDownList控件级联

简介: 1、新建一个从DropDownList继承的扩展类CommandableDropDownList.

1、新建一个从DropDownList继承的扩展类CommandableDropDownList.cs,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.Web.UI.WebControls;

namespace GrowthMonitor.BaseClass
{
    public class CommandableDropDownList : DropDownList
    {
        #region 属性
        [
        Browsable(true),
        DefaultValue("")
        ]
        public string CommandName
        {
            get
            {
                return ViewState["CommandName"] == null ? String.Empty : ViewState["CommandName"].ToString();
            }
            set
            {
                ViewState["CommandName"] = value;
            }
        }


        [
        Browsable(true),
        DefaultValue("")
        ]
        public string CommandArgument
        {
            get
            {
                return ViewState["CommandArgument"] == null ? String.Empty : ViewState["CommandArgument"].ToString();
            }
            set
            {
                ViewState["CommandArgument"] = value;
            }
        }

        #endregion

        #region 构造器
        public CommandableDropDownList()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }
        #endregion


        #region 事件

        private static object _commandEvent = new object();

        public event CommandEventHandler SelectedChangedCommand
        {
            add
            {
                Events.AddHandler(_commandEvent, value);
            }
            remove
            {
                Events.RemoveHandler(_commandEvent, value);
            }
        }

        protected virtual void OnCommand(CommandEventArgs e)
        {
            CommandEventHandler commandHander = (CommandEventHandler)Events[_commandEvent];
            if (commandHander != null)
            {
                commandHander(this, e);
            }
            else
            {
                base.RaiseBubbleEvent(this, e);
            }
        }

        #endregion

        #region 覆写的方法

        protected override void OnSelectedIndexChanged(EventArgs e)
        {
            base.OnSelectedIndexChanged(e);
            if (this.AutoPostBack)
            {
                CommandEventArgs args = new CommandEventArgs(this.CommandName, this.CommandArgument);
                OnCommand(args);
            }
        }
        #endregion
    }
}

2、在需要使用的页面头部加上如下标记:

<%@ Register TagPrefix="ddlTag" Namespace="GrowthMonitor.BaseClass" Assembly="GrowthMonitor" %>


3、在Repeater中的DropDownList

<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_OnItemDataBound" OnItemCommand="rpt_OnItemCommand">
      <ItemTemplate>
              <ddlTag:CommandableDropDownList ID="ddlVarietyType" runat="server" CommandName="VarietyTypeChange"   AutoPostBack="true">
              </ddlTag:CommandableDropDownList>

             <ddlTag:CommandableDropDownList ID="ddlVarietyName" runat="server">
             </ddlTag:CommandableDropDownList>
      </ ItemTemplate>
</asp:Repeater>

4、后台事件代码

public void rpt_OnItemCommand(object sender, RepeaterCommandEventArgs e)
{
     if (e.CommandName == "VarietyTypeChange")
     {
          string currentVarietyTypeID = String.Empty;
          int index = e.Item.ItemIndex;
          CommandableDropDownList ddl = this.rpt.Items[index].FindControl("ddlVarietyType") as CommandableDropDownList;
         if (ddl != null)
         {
              currentVarietyTypeID = ddl.SelectedItem.Value.Trim();
         }
         ddl = this.rpt.Items[index].FindControl("ddlVarietyName") as CommandableDropDownList;
         if (ddl != null)
         {
             ddl.DataSource = new VTB_VarietiesBLL().GetData(" IsDelete=0 and VarietyTypeID=" + currentVarietyTypeID, " CreateTime asc");
             ddl.DataTextField = "VarietiesName";
             ddl.DataValueField = "ID";
             ddl.DataBind();
          }
     }
}

public void rpt_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
          //品种类型
          CommandableDropDownList ddl_VarietyType = e.Item.FindControl("ddlVarietyType") as CommandableDropDownList;
          if (ddl_VarietyType != null)
          {
              ddl_VarietyType.DataSource = new VTB_VarietyTypeBLL().GetData(" IsDelete=0 ", " CreateTime asc");
              ddl_VarietyType.DataTextField = "VarietyTypeName";
              ddl_VarietyType.DataValueField = "ID";
              ddl_VarietyType.DataBind();
          }

          //品种
          CommandableDropDownList ddl_Variety = e.Item.FindControl("ddlVarietyName") as CommandableDropDownList;
         if (ddl_Variety != null)
         {
             ddl_Variety.DataSource = new VTB_VarietiesBLL().GetData(" IsDelete=0 and VarietyTypeID=" + ddl_VarietyType.SelectedItem.Value, " CreateTime asc");
             ddl_Variety.DataTextField = "VarietiesName";
             ddl_Variety.DataValueField = "ID";
             ddl_Variety.DataBind();
         }
     }
}


相关文章
|
1月前
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
9 0
|
1月前
|
SQL 数据库
使用ADO.NET查询和操作数据
使用ADO.NET查询和操作数据
10 0
|
2月前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
67 0
|
2月前
|
SQL 开发框架 前端开发
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
34 0
|
3月前
|
SQL 开发框架 JavaScript
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
30 0
|
4月前
|
Oracle 关系型数据库 数据管理
.NET医院检验系统LIS源码,使用了oracle数据库,保证数据的隔离和安全性
LIS系统实现了实验室人力资源管理、标本管理、日常事务管理、网络管理、检验数据管理(采集、传输、处理、输出、发布)、报表管理过程的自动化,使实验室的操作人员和管理者从繁杂的手工劳作中解放出来,提高了检验人员的工作效率和效益,降低了劳动成本和差错发生率。
|
4月前
|
开发框架 .NET 数据安全/隐私保护
Asp.Net第二章服务器端控件
Asp.Net第二章服务器端控件
27 0
|
4月前
|
开发框架 JavaScript .NET
Asp.Net就业课之三验证控件
Asp.Net就业课之三验证控件
44 0
|
4月前
|
开发框架 .NET
Asp.Net就业课堂之模板控件
Asp.Net就业课堂之模板控件
40 1
|
6月前
|
前端开发 JavaScript
.net core 前端传递参数有值 后端接收到的数据却是null
1、问题分析 在做接口测试时,偶然出现了前端输出有值,但是后端断点调试时却出现接收参数总是为null的情况 2、解决办法 前端打印log,看前端的每一个传值的数据类型,与后端请求参数类进行认真的一一比对 小技巧: ① 直接打印调用接口的传参值的数据类型,例如 console.log(type of this.form.name) --string console.log(type of this.form.age) --number 打印的数据类型与后端接口的参数类比对,查出不对应的类型 ② 关于非必填的值,默认传值可能出现空字符串(' ')、NaN值(Not a Number
106 0