我目前正在开发留言簿系统,我需要管理员删除特定日志。问题是我在尝试删除它时遇到错误。
错误是:Index was outside the range. It may not be negative and must be less than the crowd size.
Parameter name: index
我的代码:asp.net
<asp:DataList ID="guestBookDataList" runat="server" ondeletecommand="guestBookDataList_DeleteCommand">
<ItemTemplate>
<div id="guest-books">
<span class="guestBook-Id"> # <%#DataBinder.Eval(Container.DataItem, "id") %></span><span class="guestBook-Name">Name: <%#DataBinder.Eval(Container.DataItem, "Name") %> </span>
<span class="guestBook-Date"> Date: <%#DataBinder.Eval(Container.DataItem, "Date") %> </span> <br />
<span class="guestBook-Text"> <%#DataBinder.Eval(Container.DataItem, "text") %> </span>
<asp:LinkButton ID="LinkButtonDelete" CssClass="gastbok-remove" runat="server" CommandName="Delete">Delete<%#DataBinder.Eval(Container.DataItem, "id") %></asp:LinkButton>
</div>
</ItemTemplate>
</asp:DataList>
我的链接按钮是数据列表中每个项目的删除按钮。
我的C#代码给了我错误:
protected void guestBookDataList_DeleteCommand(
object source, DataListCommandEventArgs e)
{
int id = Convert.ToInt32(guestBookDataList.DataKeys[e.Item.ItemIndex]);
db.deleteGeustBookLog(id); //calls the sql command
bindList();
}
Basiclly我只需要从数据库中检索来宾记录ID,这样我就可以删除它。
尝试了很多不同的方法,并在谷歌上搜索,但我无法让它工作。所以现在我问你。谢谢你的时间。
答案 0 :(得分:2)
将CommandArgument添加到LinkButton及其ID。然后在删除代码中,查找e.CommandArgument,然后传递该值。
<asp:LinkButton id="LinkButton2"
Text="Delete"
CommandName="Delete"
CommandArgument='<%#DataBinder.Eval(Container.DataItem, "id") %>'
OnCommand="DeleteGuestBookEntry"
Runat="server"/>
你也可以给它一个像“DeleteGuestBookEntry”之类的命令。
void DeleteGuestBookEntry(Object sender, CommandEventArgs e)
{
int id = Convert.ToInt32(e.CommandArgument);
db.deleteGeustBookLog(id); //calls the sql command
bindList();
}
我总是会检查以确保您的ID不为空,并且是数字等,并添加一些错误处理,但这是执行此操作的简单方法。 :)
答案 1 :(得分:0)
您应该设置“datakeynames”属性
<asp:DataList ID="guestBookDataList" runat="server" ondeletecommand="guestBookDataList_DeleteCommand" datakeynames="id">