DataGrid 的ItemCommand 问题 !!!!

pontus 2005-06-16 11:42:27
当模板列中添加ImageButton,点击就触发不了ItemCommand事件

换成LinkButton就可以了,这是怎么回事???

初始化时已经有ItemCommand事件的委托
this.dgUnits.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgUnits_ItemCommand);

DataGrid 是在 !Page.IsPostBack中绑定的,点击ImageButton应该会触发ItemCommand事件阿?

ImageButton和LinkButton在触发DataGrid的ItemCommand事件时到底有什么区别?

...全文
636 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
renyu732 2005-06-16
  • 打赏
  • 举报
回复
同意楼上的解决方法。。。
hchxxzx 2005-06-16
  • 打赏
  • 举报
回复
有时候,ASP.NET经常出现一些莫名其妙的问题,怎么都没有办法解决.
此时你应新建一个页面,然后把你原页面里面的后台代码拷过去,前面代码自己重写.一般这样就可以了.
pontus 2005-06-16
  • 打赏
  • 举报
回复
这是部分代码:

====aspx

<asp:datagrid id="dgList" runat="server" AutoGenerateColumns="False" Width="100%" CellPadding="2"
DataKeyField="Id">
<AlternatingItemStyle BackColor="Ivory"></AlternatingItemStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" BackColor="#E0E9F8"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="Name" HeaderText="名称"></asp:BoundColumn>
<asp:BoundColumn DataField="PtCatalogName" HeaderText="类别">
<HeaderStyle Width="150px"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="AddDate" HeaderText="添加时间" DataFormatString="{0:yyyy-MM-dd}">
<HeaderStyle Width="100px"></HeaderStyle>
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="操作">
<HeaderStyle Width="120px"></HeaderStyle>
<ItemTemplate>
<asp:ImageButton ImageUrl="/manage/images/icon_del.gif" ID="ib" Runat="server" CommandName="Del"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>


====C# 部分
private void InitializeComponent()
{
this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click);
this.dgList.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgList_ItemCommand);
this.dgList.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgList_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);

}


private void dgList_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName == "Del")
{
string strContentId = this.dgList.DataKeys[e.Item.ItemIndex].ToString();

CDB.DeleteContent1(strContentId);

BindList();
}
}
pontus 2005-06-16
  • 打赏
  • 举报
回复
to:fengfangfang

我以前在DataGrid中同样用ImageButton没遇到这个问题,可这次就遇到了,只有换成LinkButton才行,我就不知道为什么了
老戴12345654 2005-06-16
  • 打赏
  • 举报
回复
再DataGrid的 ItemCreated 方法中注册 button的 Click事件 试试看
孟子E章 2005-06-16
  • 打赏
  • 举报
回复
把你的代码精简一下贴来看看
fengfangfang 2005-06-16
  • 打赏
  • 举报
回复
使用ImageButton,Button就是不行,只能使用LinkButton来触发ItemCommand

估计是ms的BUG
pontus 2005-06-16
  • 打赏
  • 举报
回复
换成LinkButton后,也就是控件换了,别的程序都没改动,可这样就可以触发!

到底ImageButton和LinkButton在触发DataGrid的ItemCommand事件时到底有什么区别?
pontus 2005-06-16
  • 打赏
  • 举报
回复
to:net_lover(孟子E章)

ComandName是有的

<asp:ImageButton ImageUrl="/manage/images/icon_del.gif" ID="ib" Runat="server" CommandName="Del"></asp:ImageButton>
pontus 2005-06-16
  • 打赏
  • 举报
回复
to:LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)

按照你的方法,同样无法触发
孟子E章 2005-06-16
  • 打赏
  • 举报
回复
Specify the ImageButton with CommandName="Delete" attribute.

<asp:ImageButton ID="btnDelete" runat="server" CommandName="Delete" .../>

CommandNames Cancel, Delete, Edit, NextPage, Page, PrevPage, Select, Sort
and Update correspond to the same action with the DataGrid (DataGrid has
these command names predefined for cthese actions)
LoveCherry 2005-06-16
  • 打赏
  • 举报
回复
删除后台的this.dgUnits.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgUnits_ItemCommand);
前台
<asp:datagrid onitemcommand="dgUnits_ItemCommand"....>
这样前台注册事件

然后把dgUnits_ItemCommand方法设置为保护或者公开

再试试看
孟子E章 2005-06-16
  • 打赏
  • 举报
回复
不可能的,还是有地方错了,
pontus 2005-06-16
  • 打赏
  • 举报
回复
果然,代码没变,重新再写一遍就好了!!!

62,046

社区成员

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

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

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

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