[英]how to create event handler for dynamic drop down list in c#
我使用Itemplate創建了一個動態網格視圖。現在我還在網格中創建了一個動態下拉列表。 如何在selectedindexchange上創建事件處理程序。
我創建了一個slectedindexchange事件,但它沒有工作。控件永遠不會傳遞給事件?
怎么做創建一個事件處理程序
public class DynamicGridViewTextTemplate : ITemplate
{
string _ColName;
DataControlRowType _rowType;
int _Count;
details Details1 = new details();
public DynamicGridViewTextTemplate(string ColName, DataControlRowType RowType)
{
_ColName = ColName;
_rowType = RowType;
}
public DynamicGridViewTextTemplate(DataControlRowType RowType, int ArticleCount)
{
_rowType = RowType;
_Count = ArticleCount;
}
public void InstantiateIn(System.Web.UI.Control container)
{
switch (_rowType)
{
case DataControlRowType.Header:
Literal lc = new Literal();
lc.Text = "<b>" + _ColName + "</b>";
DropDownList ddl = new DropDownList();
ddl.AutoPostBack = true;
ddl.SelectedIndexChanged += new EventHandler(this.ddl_SelIndexChanged);
container.Controls.Add(lc);
container.Controls.Add(ddl);
break;
case DataControlRowType.DataRow:
//Label lbl = new Label();
//lbl.DataBinding += new EventHandler(this.lbl_DataBind);
LinkButton lb = new LinkButton();
lb.DataBinding += new EventHandler(this.lbl_DataBind);
lb.OnClientClick +=new EventHandler(this.lb_Click);
//lbl.Controls.Add(lb);
container.Controls.Add(lb);
break;
case DataControlRowType.Footer:
Literal flc = new Literal();
flc.Text = "<b>Total No of Articles:" + _Count + "</b>";
container.Controls.Add(flc);
break;
default:
break;
}
}
private void lb_Click(Object sender, EventArgs e)
{
details1.lbl_Click(sender, e);
}
private void lbl_DataBind(Object sender, EventArgs e)
{
//Label lbl = (Label)sender;
LinkButton lbl = (LinkButton)sender;
GridViewRow row = (GridViewRow)lbl.NamingContainer;
lbl.Text =DataBinder.Eval(row.DataItem, _ColName).ToString();
}
public void ddl_SelIndexChanged(Object sender, EventArgs e)
{
Details1.ddlFilter_SelectedIndexChanged(sender,e);
}
}
你可以像這樣聲明你selectedindexchanged事件:
ddlFilter.SelectedIndexChanged += new EventHandler(ddl2_SelectedIndexChanged);
ddlFilter.AutoPostBack = true;
void ddlFilter_SelectedIndexChanged(object sender, EventArgs e)
{
//your code
}
未調用事件的原因是AutoPostBack = true字段。 如果未將其設置為true,則永遠不會調用selectedIndexChanged事件。
每當我在ASP網頁中創建一個新控件時,我都會按照這個鍋爐板(注意我添加了一些示例控件,所以它不是一個“干凈”的鍋爐板):
namespace Components {
[ToolboxData("<{0}:MyControl runat=server></{0}:MyControl>")]
public class MyControl : WebControl, INamingContainer {
// todo: add controls that are created dynamically
private GridView gridView;
public MyControl () {
Initialize();
}
[Browsable(false)]
public override ControlCollection Controls {
get { EnsureChildControls(); return base.Controls; }
}
protected override void OnLoad(EventArgs e) {
// todo: attach event listeners for instance
base.OnLoad(e);
}
protected override void CreateChildControls() {
Initialize();
}
protected override void Render(HtmlTextWriter writer) {
if (DesignMode) {
// If special design mode rendering
return;
}
base.Render(writer);
}
/// This is where the controls are created
private void Initialize() {
base.Controls.Clear();
// todo: Create all controls to add, even those "added later"
// if something is generated but should not be shown,
// set its Visible to false until its state is changed
Label exampleLabel = new Label();
exampleLabel.Visible = false; // like so
if (gridView == null) { gridView = new GridView(); }
base.Controls.Add(exampleLabel);
base.Controls.Add(gridView);
}
}
}
現在,如果您在Initialize中創建動態下拉列表並將其每次添加到您的Controls集合中,但只在您希望它顯示時將其Visibility
設置為true
,則應觸發您的事件,因為您的控件的id應該相同回發之間。
我遇到了同樣的問題,我在里面創建了動態ddl(!Page.IsPostBack)。 當我將創作移到(!Page.IsPostBack)之外時,它工作正常。
您必須在(!Page.IsPostBack)之外創建您的元素,如MUG4N所說,它應該可以正常工作。
要發生動態控件的事件,需要在page_load事件中或在page_load事件發生期間創建它並分配事件。 在Page_Load事件完成后,將觸發Control的事件。 如果未在page_load事件中重新創建控件,則事件將不會綁定到控件,也不會觸發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.