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