关于DataList 中的UpdateCommand 和CancelCommand 事件不执行的问题

xinganna 2007-11-07 11:42:52
protected override void InitializeSkin(System.Web.UI.Control skin)
{
dlManageRanks = (DataList)skin.FindControl("dlManageRanks");

this.dlManageRanks.EditCommand += new DataListCommandEventHandler(dlManageRanks_EditCommand);
this.dlManageRanks.CancelCommand += new DataListCommandEventHandler(dlManageRanks_CancelCommand);
this.dlManageRanks.DeleteCommand += new DataListCommandEventHandler(dlManageRanks_DeleteCommand);
this.dlManageRanks.UpdateCommand += new DataListCommandEventHandler(dlManageRanks_UpdateCommand);
this.dlManageRanks.ItemCommand += new DataListCommandEventHandler(dlManageRanks_ItemCommand);

// Put user code to initialize the page here
this.dlManageRanks.DataSource = Ranks.GetRanks();

//if (!Page.IsPostBack)
dlManageRanks.DataBind();
}
private void dlManageRanks_CancelCommand(object source, DataListCommandEventArgs e)
{
this.dlManageRanks.EditItemIndex = -1;
dlManageRanks.DataBind();
}

private void dlManageRanks_UpdateCommand(object source, DataListCommandEventArgs e)
{
TextBox txtRankName = (TextBox)e.Item.FindControl("txtRankName");
TextBox txtRankCountMin = (TextBox)e.Item.FindControl("txtRankMinPost");
TextBox txtRankCountMax = (TextBox)e.Item.FindControl("txtRankMaxPost");
TextBox txtRankIconUrl = (TextBox)e.Item.FindControl("txtRankIconUrl");

if (txtRankName == null
|| txtRankCountMin == null
|| txtRankCountMax == null
|| txtRankIconUrl == null)
return;

AspNetForums.Components.Rank r = (Rank)((ArrayList)dlManageRanks.DataSource)[e.Item.ItemIndex];

r.RankName = txtRankName.Text;
r.PostingCountMinimum = Int32.Parse(txtRankCountMin.Text);
r.PostingCountMaximum = Int32.Parse(txtRankCountMax.Text);
r.RankIconUrl = txtRankIconUrl.Text;

Ranks.UpdateRank(r);

dlManageRanks.EditItemIndex = -1;
dlManageRanks.DataBind();
}
......dlManageRanks_ItemCommand dlManageRanks_EditCommand dlManageRanks_DeleteCommand都能正常执行,可就是UpdateCommand 和CancelCommand 事件不执行,为什么?急!!!谢谢大家
...全文
286 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjn090114122 2010-12-30
  • 打赏
  • 举报
回复
跪求啊~~,我也是同样的问题。
symbol441 2007-11-09
  • 打赏
  • 举报
回复
呵呵,问题解决了就好,说实话你这个问题我还真是纳闷呢,只有部分事件不能触发.
xinganna 2007-11-09
  • 打赏
  • 举报
回复
问题解决了,是EditCommand状态丢了,我强制打开就好了,哈,谢谢大家了,结贴了
symbol441 2007-11-08
  • 打赏
  • 举报
回复

private void dlManageRanks_ItemCommand(object source, DataListCommandEventArgs e)
{
if(e.CommandName == "Create ")
CreateCommand(source, e);
if(e.CommandName == "update ")
this.Updatecommand(source, e);
if(e.CommandName == "cancel ")
{
this.dlManageRanks.EditItemIndex = -1;
dlManageRanks.DataBind();
}
}


xinganna 2007-11-07
  • 打赏
  • 举报
回复
我是05的程序,跟踪调试了,dlManageRanks_ItemCommand dlManageRanks_EditCommand dlManageRanks_DeleteCommand都能正常执行,可就是UpdateCommand 和CancelCommand 事件不执行,点击"更新"后走加载
protected override void InitializeSkin(System.Web.UI.Control skin)
{
dlManageRanks = (DataList)skin.FindControl( "dlManageRanks ");

this.dlManageRanks.EditCommand += new DataListCommandEventHandler(dlManageRanks_EditCommand);
this.dlManageRanks.CancelCommand += new DataListCommandEventHandler(dlManageRanks_CancelCommand);
this.dlManageRanks.DeleteCommand += new DataListCommandEventHandler(dlManageRanks_DeleteCommand);
this.dlManageRanks.UpdateCommand += new DataListCommandEventHandler(dlManageRanks_UpdateCommand);
this.dlManageRanks.ItemCommand += new DataListCommandEventHandler(dlManageRanks_ItemCommand);

// Put user code to initialize the page here
this.dlManageRanks.DataSource = Ranks.GetRanks();

//if (!Page.IsPostBack)
dlManageRanks.DataBind();
}
然后直接跳出!结束了
kings2015 2007-11-07
  • 打赏
  • 举报
回复
跟踪调试一下 你这是03的吧
xinganna 2007-11-07
  • 打赏
  • 举报
回复
恳请高人指点!!!
本人急等,在线等,解决立刻给分~~~~~~
xinganna 2007-11-07
  • 打赏
  • 举报
回复
我当然知道没触发,要怎么解决?
bumm 2007-11-07
  • 打赏
  • 举报
回复
没有触发
xinganna 2007-11-07
  • 打赏
  • 举报
回复
后台CS文件,同志们在帮忙看看啊,为什么(编辑 删除操作可以触发itemCommand事件) (更新 取消操作总是不触发itemCommand事件)


public class ManageRanks : SkinnedForumWebControl
{
protected string skinFileName = "/Admin/skin-ManageRanks.ascx";
protected AspNetForums.Components.SiteSettings settings;

protected string selectedName = string.Empty;
DataList dlManageRanks;


public ManageRanks()
{
if (SkinFilename == null)
SkinFilename = skinFileName;
}

protected override void InitializeSkin(System.Web.UI.Control skin)
{
dlManageRanks = (DataList)skin.FindControl("dlManageRanks");

this.dlManageRanks.EditCommand += new DataListCommandEventHandler(dlManageRanks_EditCommand);
this.dlManageRanks.CancelCommand += new DataListCommandEventHandler(dlManageRanks_CancelCommand);
this.dlManageRanks.DeleteCommand += new DataListCommandEventHandler(dlManageRanks_DeleteCommand);
this.dlManageRanks.UpdateCommand += new DataListCommandEventHandler(dlManageRanks_UpdateCommand);
this.dlManageRanks.ItemCommand += new DataListCommandEventHandler(dlManageRanks_ItemCommand);

// Put user code to initialize the page here
this.dlManageRanks.DataSource = Ranks.GetRanks();

//if (!Page.IsPostBack)
dlManageRanks.DataBind();
}

private void dlManageRanks_EditCommand(object source, DataListCommandEventArgs e)
{
this.dlManageRanks.EditItemIndex = e.Item.ItemIndex;
dlManageRanks.DataBind();
}

private void dlManageRanks_CancelCommand(object source, DataListCommandEventArgs e)
{
this.dlManageRanks.EditItemIndex = -1;
dlManageRanks.DataBind();
}

private void dlManageRanks_DeleteCommand(object source, DataListCommandEventArgs e)
{
Rank rank = (Rank)((ArrayList)dlManageRanks.DataSource)[e.Item.ItemIndex];

Ranks.DeleteRank(rank);

dlManageRanks.EditItemIndex = -1;
//dlManageRanks.DataBind();
Reload();
}

private void dlManageRanks_UpdateCommand(object source, DataListCommandEventArgs e)
{
TextBox txtRankName = (TextBox)e.Item.FindControl("txtRankName");
TextBox txtRankCountMin = (TextBox)e.Item.FindControl("txtRankMinPost");
TextBox txtRankCountMax = (TextBox)e.Item.FindControl("txtRankMaxPost");
TextBox txtRankIconUrl = (TextBox)e.Item.FindControl("txtRankIconUrl");

if (txtRankName == null
|| txtRankCountMin == null
|| txtRankCountMax == null
|| txtRankIconUrl == null)
return;

AspNetForums.Components.Rank r = (Rank)((ArrayList)dlManageRanks.DataSource)[e.Item.ItemIndex];

r.RankName = txtRankName.Text;
r.PostingCountMinimum = Int32.Parse(txtRankCountMin.Text);
r.PostingCountMaximum = Int32.Parse(txtRankCountMax.Text);
r.RankIconUrl = txtRankIconUrl.Text;

Ranks.UpdateRank(r);

dlManageRanks.EditItemIndex = -1;
dlManageRanks.DataBind();
}

private void dlManageRanks_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "Create")
CreateCommand(source, e);

}

private void CreateCommand(object source, DataListCommandEventArgs e)
{
TextBox txtRankName = (TextBox)e.Item.FindControl("txtNewRankName");
TextBox txtRankCountMin = (TextBox)e.Item.FindControl("txtNewRankMinPost");
TextBox txtRankCountMax = (TextBox)e.Item.FindControl("txtNewRankMaxPost");
TextBox txtRankIconUrl = (TextBox)e.Item.FindControl("txtNewRankIconUrl");

if (txtRankName == null
|| txtRankCountMin == null
|| txtRankCountMax == null
|| txtRankIconUrl == null)
return;

Rank rank = new Rank(0, txtRankName.Text, Int32.Parse(txtRankCountMin.Text), Int32.Parse(txtRankCountMax.Text), txtRankIconUrl.Text);

Ranks.CreateRank(rank);

//DataBind();
Reload();
}
private void Reload()
{
HttpContext.Current.Response.Redirect(Globals.GetSiteUrls().AdminManageRanks, true);
}
}
xinganna 2007-11-07
  • 打赏
  • 举报
回复
前台写成了用户控件Ranks.ascx

<span class="forumName">
<% = ResourceManager.GetString("Rank_Title")%>
</span>
<br>
<span class="forumThread">
<% = ResourceManager.GetString("Rank_SubTitle")%>
</span>
<br>
<br>
<asp:DataList ID="dlManageRanks" runat="server" Width="100%" Height="100%">
<HeaderTemplate>
<table id="tblManageRanks" class="tableBorder" cellspacing="1" cellpadding="3" border="0">
<tr>
<td class="column" width="75px">
<% = ResourceManager.GetString("ID") %>
</td>
<td class="column" width="65px">
<% = ResourceManager.GetString("Name")%>
</td>
<td class="column" width="80px">
<% = ResourceManager.GetString("Rank_MinPosts")%>
</td>
<td class="column" width="80px">
<% = ResourceManager.GetString("Rank_MaxPosts")%>
</td>
<td class="column" width="100px">
<% = ResourceManager.GetString("Rank_IconUrl")%>
</td>
<td class="column" width="130px" nowrap>
<% = ResourceManager.GetString("Actions")%>
</td>
</tr>
</HeaderTemplate>
<FooterTemplate>
<tr>
<td class="f">
<% = ResourceManager.GetString("ID")%>
</td>
<td class="fh">
<asp:TextBox runat="server" ID="txtNewRankName" Columns="10"></asp:TextBox></td>
<td class="fh">
<asp:TextBox runat="server" ID="txtNewRankMinPost" Columns="10"></asp:TextBox></td>
<td class="fh">
<asp:TextBox runat="server" ID="txtNewRankMaxPost" Columns="10"></asp:TextBox></td>
<td class="fh">
<asp:TextBox runat="server" ID="txtNewRankIconUrl" Columns="40"></asp:TextBox></td>
<td class="fh">
<asp:Button ID="CreateSmiley" CommandName="Create" Width="60" Text='<%# ResourceManager.GetString("Create")%>'
runat="server"></asp:Button>
</td>
</tr>
</TABLE>
</FooterTemplate>
<ItemTemplate>
<tr>
<td class="f">
<%# DataBinder.Eval(Container.DataItem, "RankId") %>
</td>
<td class="fh">
<%# DataBinder.Eval(Container.DataItem, "RankName") %>
</td>
<td class="fh">
<%# DataBinder.Eval(Container.DataItem, "PostingCountMinimum") %>
</td>
<td class="fh">
<%# DataBinder.Eval(Container.DataItem, "PostingCountMaximum") %>
</td>
<td class="fh">
<asp:Image runat="server" AlternateText='<%# DataBinder.Eval(Container.DataItem, "RankIconUrl") %>'
ImageUrl='<%# Globals.GetSkinPath() + "/images/" + DataBinder.Eval(Container.DataItem, "RankIconUrl") %>'
ID="Image1" />
</td>
<td class="fh">
<asp:Button ID="EditRank" CommandName="Edit" runat="server" Width="60" Text='<%# ResourceManager.GetString("Edit")%>'>
</asp:Button>
<asp:Button ID="DeleteRank" CommandName="Delete" runat="server" Width="60" Text='<%# ResourceManager.GetString("Delete")%>'>
</asp:Button>
</td>
</tr>
</ItemTemplate>
<EditItemTemplate>
<tr>
<td class="f">
<%# DataBinder.Eval(Container.DataItem, "RankId") %>
</td>
<td class="fh">
<asp:TextBox ID="txtRankName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "RankName") %>'>
</asp:TextBox></td>
<td class="fh">
<asp:TextBox ID="txtRankMinPost" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "PostingCountMinimum") %>'>
</asp:TextBox></td>
<td class="fh">
<asp:TextBox ID="txtRankMaxPost" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "PostingCountMaximum") %>'>
</asp:TextBox></td>
<td class="fh">
<asp:TextBox ID="txtRankIconUrl" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "RankIconUrl") %>'>
</asp:TextBox></td>
<td class="fh">
<asp:Button ID="UpdateRank" Text='<%# ResourceManager.GetString("Update")%>' runat="server"
CommandName="update" Width="60"></asp:Button>
<asp:Button ID="CancelRank" Text='<%# ResourceManager.GetString("Cancel")%>' runat="server"
CommandName="cancel" Width="60"></asp:Button></td>
</tr>
</EditItemTemplate>
</asp:DataList>
he_yang9999 2007-11-07
  • 打赏
  • 举报
回复
盗版的换控件吧!~
symbol441 2007-11-07
  • 打赏
  • 举报
回复

楼主参考一下




private void bind()
{
db sdb = new db();
DataList1.DataSource = sdb.dt("select top 10 * from authors");
DataList1.DataKeyField = "au_id";
DataList1.DataBind();

}
protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
{
DataList1.EditItemIndex = e.Item.ItemIndex;
bind();
}
protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e)
{
DataList1.EditItemIndex = -1;
bind();
}
protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
{
string id=DataList1.DataKeys[e.Item.ItemIndex].ToString();
db sdb = new db();
string query="delete from authors where au_id='"+id+"'";
if (sdb.sql(query) > 0)
{
Response.Write("<script>return alert('删除成功')");
DataList1.EditItemIndex = -1;
bind();
}
}
protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
{
string id=DataList1.DataKeys[e.Item.ItemIndex].ToString();
string fname = ((TextBox)e.Item.FindControl("TextBox2")).Text;
string city = ((TextBox)e.Item.FindControl("TextBox3")).Text;
db sdb = new db();
string query="update authors set au_fname='"+fname+"',city='"+city+"' where au_id='"+id+"'";
if (sdb.sql(query) > 0)
{
DataList1.EditItemIndex = -1;
bind();
}
}
symbol441 2007-11-07
  • 打赏
  • 举报
回复
楼主参考一下

<asp:DataList ID="DataList1" runat="server" BackColor="White" BorderColor="#999999"
BorderStyle="None" BorderWidth="1px" CellPadding="3" DataKeyField="au_id" GridLines="Vertical"
HorizontalAlign="Center" OnCancelCommand="DataList1_CancelCommand" OnDeleteCommand="DataList1_DeleteCommand"
OnEditCommand="DataList1_EditCommand" OnUpdateCommand="DataList1_UpdateCommand"
RepeatColumns="5" RepeatDirection="Horizontal">
<FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
<SelectedItemStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<ItemTemplate>
au_id:
<asp:Label ID="au_idLabel" runat="server" Text='<%# Eval("au_id") %>'></asp:Label><br />
au_fname:
<asp:Label ID="au_fnameLabel" runat="server" Text='<%# Eval("au_fname") %>'></asp:Label><br />
city:
<asp:Label ID="cityLabel" runat="server" Text='<%# Eval("city") %>'></asp:Label><br />
<br />
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="edit">修改</asp:LinkButton> 
<asp:LinkButton ID="LinkButton2" runat="server" CommandName="delete">删除</asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
au_id: 
<asp:Label ID="Label1" runat="server" Text='<%# Eval("au_id") %>'></asp:Label><br />
au_fname: 
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Eval("au_fname") %>'></asp:TextBox><br />
city:
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Eval("city") %>'></asp:TextBox><br />
<br />
<asp:LinkButton ID="LinkButton3" runat="server" CommandName="update">保存</asp:LinkButton> 
<asp:LinkButton ID="LinkButton4" runat="server" CommandName="cancel">取消</asp:LinkButton>
</EditItemTemplate>
<AlternatingItemStyle BackColor="Gainsboro" />
<ItemStyle BackColor="#EEEEEE" ForeColor="Black" />
<HeaderTemplate>
</HeaderTemplate>
<HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
<FooterTemplate>
</FooterTemplate>
</asp:DataList>

xinganna 2007-11-07
  • 打赏
  • 举报
回复
自己顶一下,这贴不能沉底呀~~~~~~高手们帮忙啊~~~~~
xinganna 2007-11-07
  • 打赏
  • 举报
回复
我的程序的问题可能没跟大家说清楚,一开始加载是个列表,最后两列是按钮
1 小李 男 23 编辑 删除
**********************************当点击"编辑"各列变为文本眶,(编辑 删除操作可以触发itemCommand事件)
2 小王 女 24 更新 取消
*********************************当点击"更新 "时,存如数据库,(更新 取消操作总是不触发itemCommand事件)
我已经将程序修改为
private void dlManageRanks_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "Create")
CreateCommand(source, e);
else if (e.CommandName == "update")
this.Updatecommand(source, e);
else if (e.CommandName == "cancel")
{
this.dlManageRanks.EditItemIndex = -1;
dlManageRanks.DataBind();
}
}
不知道是那里的原因!!!!问题出在那里?
symbol441 2007-11-07
  • 打赏
  • 举报
回复
打错,是半年前..
symbol441 2007-11-07
  • 打赏
  • 举报
回复
在半夜前我也遇到了楼主同样的问题,后来查询了很多资料
最后得到的答案就是UpdateCommand 和CancelCommand 事件,根本就是DataList事件的鸡肋摆设
害的我忙活了,半天,最后把事件全部写在了
protected void dList_ItemCommand(object source, DataListCommandEventArgs e)
{

}
中来实现功能的,通过e.CommandName在itemCommand中来进行处理
eg,根据e.CommandName=="Cancel"来写相应的取消事件代码
希望这可以给楼主一些帮助哈..

lishijie910123 2007-11-07
  • 打赏
  • 举报
回复
路过,
顶一下

62,041

社区成员

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

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

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

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