开发者社区> 暖枫无敌> 正文
阿里云
为了无法计算的价值
打开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();
         }
     }
}


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

相关文章
在ASP.NET中使用ListView控件对数据进行显示、分页和排序
在ASP.NET中使用ListView控件对数据进行显示、分页和排序
0 0
在ASP.NET中分页显示DataList控件中的数据
在ASP.NET中分页显示DataList控件中的数据
0 0
全网最全面的ASP.NET标准控件介绍及代码演示(下)
全网最全面的ASP.NET标准控件介绍及代码演示(下)
0 0
全网最全面的ASP.NET标准控件介绍及代码演示(上)
全网最全面的ASP.NET标准控件介绍及代码演示(上)
0 0
【WPF】【UWP】借鉴 asp.net core 管道处理模型打造图片缓存控件 ImageEx
原文:【WPF】【UWP】借鉴 asp.net core 管道处理模型打造图片缓存控件 ImageEx 在 Web 开发中,img 标签用来呈现图片,而且一般来说,浏览器是会对这些图片进行缓存的。 比如访问百度,我们可以发现,图片、脚本这种都是从缓存(内存缓存/磁盘缓存)中加载的,而不是再去访问一次百度的服务器,这样一方面改善了响应速度,另一方面也减轻了服务端的压力。
1093 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载