代码如下:public partial class SDGroupPanel : System.Web.UI.UserControl
{
private CheckBoxList checkboxlist = new CheckBoxList();
private RadioButtonList sortRadioList = new RadioButtonList();//排序选择 protected override void CreateChildControls()
{
EventHandler handler = base.Events[selectedObject] as EventHandler;
if (handler != null)
{
this.checkboxlist.SelectedIndexChanged += handler;
}
this.checkboxlist.SelectedIndexChanged += new EventHandler(checkboxlist_SelectedIndexChanged); this.panel.Controls.Add(checkboxlist); this.Controls.Add(panel); ChildControlsCreated = true;
}
} /// <summary>
/// 在该事件中初始化排序所需的下拉项与单选项
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void checkboxlist_SelectedIndexChanged(object sender, EventArgs e)
{
InitSortButton();
} private void InitSortButton()
{
if (SortDropDownList.Items.Count > 0)
{
panel.Controls.Add(SortDropDownList);
panel.Controls.Add(sortRadioList); if (sortRadioList.Items.Count == 0)
{
sortRadioList.Items.Add(new ListItem("升序", "1"));
sortRadioList.Items.Add(new ListItem("降序", "0"));
}
sortRadioList.RepeatDirection = RepeatDirection.Horizontal;
sortRadioList.RepeatLayout = RepeatLayout.Flow;
sortRadioList.AutoPostBack = true; sortRadioList.SelectedIndexChanged += checkboxlist_SelectedIndexChanged;
if (base.Events[sortObject] != null)
{
EventHandler ev = base.Events[sortObject] as EventHandler;
this.sortRadioList.SelectedIndexChanged += ev;
}
}
}
现在的问题就是点击sortRadioList按钮时,触发不了sortRadioList的SelectedIndexChanged事件。请问大家要如何解决呢?
{
private CheckBoxList checkboxlist = new CheckBoxList();
private RadioButtonList sortRadioList = new RadioButtonList();//排序选择 protected override void CreateChildControls()
{
EventHandler handler = base.Events[selectedObject] as EventHandler;
if (handler != null)
{
this.checkboxlist.SelectedIndexChanged += handler;
}
this.checkboxlist.SelectedIndexChanged += new EventHandler(checkboxlist_SelectedIndexChanged); this.panel.Controls.Add(checkboxlist); this.Controls.Add(panel); ChildControlsCreated = true;
}
} /// <summary>
/// 在该事件中初始化排序所需的下拉项与单选项
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void checkboxlist_SelectedIndexChanged(object sender, EventArgs e)
{
InitSortButton();
} private void InitSortButton()
{
if (SortDropDownList.Items.Count > 0)
{
panel.Controls.Add(SortDropDownList);
panel.Controls.Add(sortRadioList); if (sortRadioList.Items.Count == 0)
{
sortRadioList.Items.Add(new ListItem("升序", "1"));
sortRadioList.Items.Add(new ListItem("降序", "0"));
}
sortRadioList.RepeatDirection = RepeatDirection.Horizontal;
sortRadioList.RepeatLayout = RepeatLayout.Flow;
sortRadioList.AutoPostBack = true; sortRadioList.SelectedIndexChanged += checkboxlist_SelectedIndexChanged;
if (base.Events[sortObject] != null)
{
EventHandler ev = base.Events[sortObject] as EventHandler;
this.sortRadioList.SelectedIndexChanged += ev;
}
}
}
现在的问题就是点击sortRadioList按钮时,触发不了sortRadioList的SelectedIndexChanged事件。请问大家要如何解决呢?
事件是有绑定的,但是是在this.checkboxlist.SelectedIndexChanged中绑定,可能问题就是如sp1234所说,一定要在page_load事件结束前绑定才有效。
if(flag!=null && (bool)flag)
{
RadioButtonList sortRadioList = new RadioButtonList();
sortRadioList.ID = "sortRadios"; //设置同一个ID,这样就不必要求在panel中相同位置找到它
panel.Controls.Add(SortDropDownList); //从你的代码看不出这是哪里初始化的
panel.Controls.Add(sortRadioList);
sortRadioList.SelectedIndexChanged += checkboxlist_SelectedIndexChanged;
if (base.Events[sortObject] != null)
{
EventHandler ev = base.Events[sortObject] as EventHandler;
this.sortRadioList.SelectedIndexChanged += ev;
}
嗯,我本是想在CreateChildControls中一并添加SortDropDownList,sortRadioList,但这两个控件的显示又是要根据调用页面给该用户的SortDropDownList.Items属性的填充数据来控制,而CreateChildControls方法在回发后的执行顺序又在Page_Load之前(调用页是在Page_Load事件中给SortDropDownList.Items属性填充值的),所以都不知道要在那事件中来控制SortDropDownList,sortRadioList的显示了。
SortDropDownList是这个控件中的一个属性。
private DropDownList sortDropDownList;
/// <summary>
/// 可排序项
/// </summary>
public DropDownList SortDropDownList
{
get
{
if (sortDropDownList == null)
{
sortDropDownList = new DropDownList();
}
return sortDropDownList;
}
set { sortDropDownList = value; }
}
请问一下,object flag=ViewState["存在另外两个控件"];这个是什么意思?