动态加载多个ascx并激发事件处理
2008-09-23 18:04
399 查看
动态加载多个ascx并激发事件处理
ascx类中公开属性PhoneID用于区别不同的对象
//电话PhoneID
public int PhoneID
{
get { return _PhoneID; }
set { _PhoneID = value; }
}
自定义事件参数event类
//自定义事件参数event类
//public class PhoneItemEventArgs : EventArgs
//{
// private object _senderex;
// public object senderex
// {
// get
// {
// return _senderex;
// }
// }
// public PhoneItemEventArgs(object sender) : base()
// {
// this._senderex = sender;
// }
//}
//在ascx的类中添加事件定义代码
public event ItemCommandHandler OnCommand;
public delegate void ItemCommandHandler(object sender, PhoneItemEventArgs e);
//触发事件,可在其它按钮事件中调用
private void SendCommand(object sender, EventArgs e)
{
if (OnCommand != null)
{
OnCommand(this, new PhoneItemEventArgs(sender));
}
}
//按钮事件调用SendCommand,触发事件
//protected void lbtnNum_Click(object sender, EventArgs e)
//{
// SendCommand(sender, e);
//}
在调用 ascx的页面合适的位置,添加 PlaceHolder 控件做为动态加载的容器
<asp:PlaceHolder ID="PhoneList" runat="server" > </asp:PlaceHolder>
在后台代码(.cs)添加代码,动态加载控制
PhoneList.Controls.Add(new LiteralControl("<table><tr>"));
foreach (DataRow dr in dt.Rows)
{
if (i > 100) //限制100个
{
break;
}
PhoneID = i;
Inc_PhoneItem tmpItem = (Inc_PhoneItem)LoadControl("~/Inc/PhoneItem.ascx");
tmpItem.Visible = true;
tmpItem.ID = "PhoneItem" + PhoneID.ToString();
tmpItem.PhoneID = Convert.ToInt32(PhoneID);
//添加事件
tmpItem.OnCommand += new Inc_PhoneItem.ItemCommandHandler(this.PhoneItemCommand);
PhoneList.Controls.Add(tmpItem);
PhoneList.Controls.Add(new LiteralControl("<td>"));
PhoneList.Controls.Add(tmpItem);
PhoneList.Controls.Add(new LiteralControl("</td>"));
//每5列换行
if (i % 5 == 0)
{
PhoneList.Controls.Add(new LiteralControl("</tr>"));
PhoneList.Controls.Add(new LiteralControl("<tr>"));
}
i++;
}
PhoneList.Controls.Add(new LiteralControl("</tr></table>"));
在cs代码中添加事件处理过程
//private void PhoneItemCommand(Object sender, PhoneItemEventArgs e)
//{
// string commad = "";
// Inc_PhoneItem tmpItem = (Inc_PhoneItem)sender;
// if (e.senderex.GetType().Equals(typeof(LinkButton)))
// {
// LinkButton senderex = (LinkButton)e.senderex;
// commad = senderex.CommandName;
// }
// if(commad.Equals("Level") )
// {
// this.PanelLevel.Visible = true;
// }
// }
ascx类中公开属性PhoneID用于区别不同的对象
//电话PhoneID
public int PhoneID
{
get { return _PhoneID; }
set { _PhoneID = value; }
}
自定义事件参数event类
//自定义事件参数event类
//public class PhoneItemEventArgs : EventArgs
//{
// private object _senderex;
// public object senderex
// {
// get
// {
// return _senderex;
// }
// }
// public PhoneItemEventArgs(object sender) : base()
// {
// this._senderex = sender;
// }
//}
//在ascx的类中添加事件定义代码
public event ItemCommandHandler OnCommand;
public delegate void ItemCommandHandler(object sender, PhoneItemEventArgs e);
//触发事件,可在其它按钮事件中调用
private void SendCommand(object sender, EventArgs e)
{
if (OnCommand != null)
{
OnCommand(this, new PhoneItemEventArgs(sender));
}
}
//按钮事件调用SendCommand,触发事件
//protected void lbtnNum_Click(object sender, EventArgs e)
//{
// SendCommand(sender, e);
//}
在调用 ascx的页面合适的位置,添加 PlaceHolder 控件做为动态加载的容器
<asp:PlaceHolder ID="PhoneList" runat="server" > </asp:PlaceHolder>
在后台代码(.cs)添加代码,动态加载控制
PhoneList.Controls.Add(new LiteralControl("<table><tr>"));
foreach (DataRow dr in dt.Rows)
{
if (i > 100) //限制100个
{
break;
}
PhoneID = i;
Inc_PhoneItem tmpItem = (Inc_PhoneItem)LoadControl("~/Inc/PhoneItem.ascx");
tmpItem.Visible = true;
tmpItem.ID = "PhoneItem" + PhoneID.ToString();
tmpItem.PhoneID = Convert.ToInt32(PhoneID);
//添加事件
tmpItem.OnCommand += new Inc_PhoneItem.ItemCommandHandler(this.PhoneItemCommand);
PhoneList.Controls.Add(tmpItem);
PhoneList.Controls.Add(new LiteralControl("<td>"));
PhoneList.Controls.Add(tmpItem);
PhoneList.Controls.Add(new LiteralControl("</td>"));
//每5列换行
if (i % 5 == 0)
{
PhoneList.Controls.Add(new LiteralControl("</tr>"));
PhoneList.Controls.Add(new LiteralControl("<tr>"));
}
i++;
}
PhoneList.Controls.Add(new LiteralControl("</tr></table>"));
在cs代码中添加事件处理过程
//private void PhoneItemCommand(Object sender, PhoneItemEventArgs e)
//{
// string commad = "";
// Inc_PhoneItem tmpItem = (Inc_PhoneItem)sender;
// if (e.senderex.GetType().Equals(typeof(LinkButton)))
// {
// LinkButton senderex = (LinkButton)e.senderex;
// commad = senderex.CommandName;
// }
// if(commad.Equals("Level") )
// {
// this.PanelLevel.Visible = true;
// }
// }
相关文章推荐
- Asp.net开发心得点滴[动态加载的用户控件使用事件委托,交给页面处理的事件无效问题]
- ASP.NET 动态加载控件激发事件的问题
- js定时刷新局部页面及动态加载页面后事件处理
- QML事件处理--使用Loader动态加载组件
- C# aspx页面动态加载ascx用户控件
- 文字添加响应事件,js动态加载CSS, js弹出DIV
- C# WinForm利用sideBar动态加载菜单栏,并创建菜单栏事件
- JS动态给元素添加事件处理代码
- 使用webview加载本地html页面,并处理html页面中的javascript事件
- 加载页面或返回到页面时不触发 onload 事件处理程序
- GridView激发了未处理的事件“PageIndexChanging”的分析
- 针对js动态添加元素后,事件处理不起作用的解决方案。
- GridView“GridView1”激发了未处理的事件“RowDeleting”
- ACE:Reactor框架--处理事件及多个I/O流
- C# aspx页面动态加载ascx用户控件 及 利用反射调用其
- GridView“gv_Info”激发了未处理的事件“RowEditing” “RowEditing”
- js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的
- asp.net 动态加载用户自定义控件竟然不执行DataGrid 中的ItemDataBound事件?
- Jquery ajax在select中动态加载option并且添加点击事件
- 在一个消息响应函数中响应多个动态生成的按钮点击事件