我创建了一个在日历中选择日期后出现的详细信息视图.此详细信息视图通过代码后面的select语句填充.这是我的问题列表:
>我必须在编辑按钮上单击两次以在编辑模式下获取详细信息视图.
>一旦进入编辑模式,我会看到更新和取消按钮,但我还必须在取消时单击两次才能返回到只读状态.
>当我处于编辑模式时,我有3行可以编辑,当我在readOnly模式下按两次取消时,这3行的值不再显示,它们只是空字段,尽管数据仍然在数据库.
>当我在编辑模式下更改内容并按更新时,我的详细信息视图就消失了.
代码隐藏:
protected void DetailView1_ModeChanging(Object sender,DetailsviewmodeEventArgs e) { if (e.NewMode == Detailsviewmode.Edit) { DetailsView1.ChangeMode(e.NewMode); } if (e.CancelingEdit) { DetailsView1.ChangeMode(Detailsviewmode.ReadOnly); } } protected void DetailView1_ItemUpdating(Object sender,DetailsViewUpdateEventArgs e) { DetailsView1.DataBind(); } protected void DetailsView1_ItemUpdated(object sender,DetailsViewUpdatedEventArgs e) { DetailsView1.DataBind(); }
标记:
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" OnModeChanging="DetailView1_ModeChanging" OnItemUpdating="DetailView1_ItemUpdating" OnItemUpdated="DetailsView1_ItemUpdated" AllowPaging="True" PageSize="5" HeaderText="Agenda" CellPadding="10" ForeColor="#333333" />
解决方法
您的问题出在DetailView1_ModeChanging中
The ModeChanging event is raised when a DetailsView control attempts to change between edit,insert,and read-only mode,but before the CurrentMode property is updated. This allows you to provide an event handler that performs a custom routine,such as canceling the mode change,whenever this event occurs.
从MSDN起
你需要使用Item Command事件
protected void DetailsView1_itemcommand(object sender,DetailsViewCommandEventArgs e) { if (e.CommandName == "Edit") { DetailsView1.ChangeMode(Detailsviewmode.Edit); } }
编辑:
protected void DetailView1_ModeChanging(Object sender,DetailsviewmodeEventArgs e) { if (e.NewMode == Detailsviewmode.Edit) { DetailsView1.ChangeMode(e.NewMode); DetailsView1.Datebind(); // add this and check } if (e.CancelingEdit) { DetailsView1.ChangeMode(Detailsviewmode.ReadOnly); DetailsView1.Datebind(); // add this and check } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。