开发者社区> 暖枫无敌> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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();
         }
     }
}


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
OSPF中的次优外部路由——Forwarding Address
在OSPF中外部路由是从ASBR(自治系统边界路由器)中导进来的(第五类的LSA)
126 0
ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法 一、前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relational Mapping,对象关系映射)出现了,我们开始使用 EF、Dapper、NHibernate,亦或是国人的 SqlSugar 代替我们原来的 SqlHelper.cs。
2786 0
asp.net jquery ajax数据操作 DropDownList级联
1、定义一个类 CityCounty.cs文件,如下: using System; using System.
777 0
Asp.net实现继承于DropDownList的树状控件(转)
  如下图所示: 该控件为无限级扩展的,只需要指定其子节点字段名(默认为ID),父节点字段名(默认为parentID),以及第一层父节点的值即可(默认为0)。
689 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载