300分求解事件冒泡问题,结帖时另开新帖送分!

ldljlq 2004-11-16 10:45:21
一个DataList显示所有服装产品,项模板中含有一个DataGrid,显示同一个款式的不同颜色的服装。

显示正常,但是DataGrid无法编辑,据说是事件冒泡的问题。

目前知道的解决方法是在aspx页面中指定DataGrid的EditCommand="DataGrid_EditCommand",这样确实可以解决问题,但是我要在后台代码中解决问题的办法。
...全文
150 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhcoolhacker 2004-11-16
  • 打赏
  • 举报
回复
示例如下:
/// <summary>
/// 点击事件
/// </summary>
/// <param name="e">事件参数</param>
public void OnClick(EventArgs e)
{
if(Click != null)
Click(this, e);

// 冒泡事件
RaiseBubbleEvent(this, e);
}

// 响应子控件(LinkButton)冒泡事件
protected override bool OnBubbleEvent(object source, EventArgs args)
{
bool handled = false;

if(args is CommandEventArgs)
{
CommandEventArgs ce = (CommandEventArgs)args;
OnClick(ce);
handled = true;
}

return handled;
}
amendajing 2004-11-16
  • 打赏
  • 举报
回复
mark,找本c的书看看
ldljlq 2004-11-16
  • 打赏
  • 举报
回复
又研究了一下MSDN上的资料。
难道要自己定义一个从datagrid继承的控件?然后重写它的OnBubbleEvent方法?
那。。。。这样还不如直接在aspx页面中直接指定这个子控件的事件方法来得方便。
ldljlq 2004-11-16
  • 打赏
  • 举报
回复
protected override bool OnBubbleEvent(object source, EventArgs e)
{
bool handled = false;
if (e is CommandEventArgs)
{
CommandEventArgs ce = (CommandEventArgs)e;
if (ce.CommandName == "Click")
{
OnClick(ce);
handled = true;
}
else if (ce.CommandName == "Reset")
{
OnReset(ce);
handled = true;
}
else if (ce.CommandName == "Submit")
{
OnSubmit(ce);
handled = true;
}

}
return handled;
}

重写父控件的OnBubbleEvent方法?在其中把子控件的事件冒泡?好像有点头绪了,去试试先。
jasonboy 2004-11-16
  • 打赏
  • 举报
回复
帮忙up
trnbo 2004-11-16
  • 打赏
  • 举报
回复
可能我理解错楼主的意思了,^_^
see

http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconbubblingcommandevent.asp

http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconeventbubblingcontrolsample.asp

ldljlq 2004-11-16
  • 打赏
  • 举报
回复
(DataList中嵌套DataGrid,子控件事件无法捕获)
DataList的itemcommand中根本捕获不到这个datagrid产生的事件,怎么捕获这个事件??
hebookboy 2004-11-16
  • 打赏
  • 举报
回复
up
trnbo 2004-11-16
  • 打赏
  • 举报
回复
http://www.ddvip.net/web/aspnet/technique/57.htm
ldljlq 2004-11-16
  • 打赏
  • 举报
回复
附我的解决方法:
aspx文件
<asp:DataGrid id="dgList" runat="server" Width="100%" DataKeyField="id" AutoGenerateColumns="False" OnEditCommand="DataGrid_OnEditCommand" OnCancelCommand="DataGrid_OnCancelCommand" OnUpdateCommand="DataGrid_OnUpdateCommand" OnDeleteCommand="DataGrid_OnDeleteCommand">

cs文件
public void DataGrid_OnUpdateCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e){}
public void DataGrid_OnCancelCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e){}
public void DataGrid_OnDeleteCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e){}
ldljlq 2004-11-16
  • 打赏
  • 举报
回复
说明一下,本来是想300分求在后台代码中的解决方法,但是 trnbo(【没有蛀牙】→闭关修行) 给的是MSDN上的资料,这些发帖之前已经看过了,想求更好的解决方法才发这帖子的。saucer(思归) 的方法虽然正确,但不是我想要的解决方法,所以两位各给50分,不再另外开帖子送分了。
ldljlq 2004-11-16
  • 打赏
  • 举报
回复
决定不再探索更好的办法了,因为解决方法我试过了,只有在aspx页面中直接指定事件方法是最方便的。
也就是思归说的那种,不过不需要dg.EditCommand += new DataGridCommandEventHandler(YourHandlerHere);来委托。

结帖了。
saucer 2004-11-16
  • 打赏
  • 举报
回复
you can bind the EditCommand to the datagrid inside the ItemCreated event for DataList

<asp:DataList id="ItemsList"

OnItemCreated="Item_Created"


void Item_Created(Object sender, DataListItemEventArgs e)
{

if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
DataGrid dg = (DataGrid)e.Item.FindControl("DataGrid1");
dg.EditCommand += new DataGridCommandEventHandler(YourHandlerHere);
....

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧