我声明性地创建了一个LinqDataSource和DataList,并将它们绑定在标记中。我创建了一个ItemTemplate和Edit Template。
我已将DataLists oneditcommand和oncancelcommand绑定到后面代码中的方法。
<asp:DataList ID="MyDataList" runat="server" DataSourceID="LinqDataSource1" RepeatDirection="Horizontal"
Font-Bold="False" Font-Italic="False" Font-Overline="False" Font-Strikeout="False"
Font-Underline="False" HorizontalAlign="Center" RepeatColumns="4"
oneditcommand="MyDataList_EditCommand"
oncancelcommand="MyDataList_CancelCommand"
>
<ItemTemplate>
<div style="margin: 5px;">
<asp:LinkButton Text="Edit" CommandName="Edit" style="float:right" runat="server" />
// Other markup
</div>
</ItemTemplate>
当我单击ItemTemplate中的LinkButton时,它会运行以下代码:
protected void DataList_EditCommand(object source, DataListCommandEventArgs e)
{
MyDataList.EditItemIndex = e.Item.ItemIndex;
MyDataList.DataBind();
}
这样可以正常工作,并将所选项目放入DataList进入编辑模式。 编辑模板:
<EditItemTemplate>
<div style="margin: 5px;">
<asp:LinkButton Text="Cancel" style="float:right"
runat="server" CommandName="cancel" CausesValidation="false"/>
//other markup
</div>
</EditItemTemplate>
当我单击编辑模板中的取消按钮时,它不会触发后面代码中的方法(断点不会被击中)。
取消时应运行的代码永远不会运行,因此我无法将编辑模式退回到正常读取模式:
protected void MyDataList_CancelCommand(object source, DataListCommandEventArgs e)
{
PhotoDataList.EditItemIndex = -1;
PhotoDataList.DataBind();
}
有人能想到这个的原因吗?
----更新
似乎它只是DataList上的一个事件的第二次触发不起作用,因为我知道绑定到ItemCommand事件,并且它将拦截DataListCommandEventArgs.CommandName属性并根据该属性执行某些操作。如果单击“编辑”链接按钮,则会触发ItemCommand方法(根本没有代码体),但第二次单击“编辑链接”按钮时,ItemCommand方法不会被命中。
答案 0 :(得分:1)
您的DataList的名称是:“MyDataList”
但是取消事件调用PhotoDataList!
protected void MyDataList_CancelCommand(object source, DataListCommandEventArgs e)
{
PhotoDataList.EditItemIndex = -1;
PhotoDataList.DataBind();
}
答案 1 :(得分:0)
我无法复制你的问题,我运行了这个演示代码,所有事件和模板都运行良好:
How to: Allow Users to Edit Items in DataList Web Server Controls
您的活动日志中是否有任何错误?另外,我没有看到DataKeyField已定义,您如何选择数据?