DetailsView的wasn't handled问题
郁闷,baidu不到,只好来问了.
错误提示是The DetailsView 'DetailsView1 ' fired event ModeChanging which wasn 't handled
首先,第一次进入页面没问题,能显示DetailsView ,但是我一点击Edit User Info就出错.
我DetailsView 没有DataSourceID,直接绑到了一个ArrayList上,难道这就是出错的原因??难道是OnItemUpdating事件有错??首先名字什么的绝对是匹配,然后OnItemUpdating事件里的代码我是直接抄的,原代码都没有问题,怎么抄过来就有问题了?只不过原代码DetailsView 是有DataSourceID 而已.
下面这个是DetailsView 的代码
<asp:DetailsView AutoGenerateRows= "False " ID= "DetailsView1 " runat= "server " OnItemUpdating= "DetailsView1_ItemUpdating1 " >
<Fields>
<asp:BoundField DataField= "UserName " HeaderText= "User Name " ReadOnly= "True " HeaderStyle-CssClass= "detailheader " ItemStyle-CssClass= "detailitem ">
</asp:BoundField>
<asp:BoundField DataField= "Email " HeaderText= "Email " HeaderStyle-CssClass= "detailheader " ItemStyle-CssClass= "detailitem "> </asp:BoundField>
<asp:BoundField DataField= "Comment " HeaderText= "Comment " HeaderStyle-CssClass= "detailheader " ItemStyle-CssClass= "detailitem "> </asp:BoundField>
<asp:CheckBoxField DataField= "IsApproved " HeaderText= "Active User " HeaderStyle-CssClass= "detailheader " ItemStyle-CssClass= "detailitem " />
<asp:CheckBoxField DataField= "IsLockedOut " HeaderText= "Is Locked Out " ReadOnly= "true " HeaderStyle-CssClass= "detailheader " ItemStyle-CssClass= "detailitem " />
<asp:CheckBoxField DataField= "IsOnline " HeaderText= "Is Online " ReadOnly= "True " HeaderStyle-CssClass= "detailheader " ItemStyle-CssClass= "detailitem " />
<asp:BoundField DataField= "CreationDate " HeaderText= "CreationDate " ReadOnly= "True "
HeaderStyle-CssClass= "detailheader " ItemStyle-CssClass= "detailitem "> </asp:BoundField>
<asp:BoundField DataField= "LastActivityDate " HeaderText= "LastActivityDate " ReadOnly= "True " HeaderStyle-CssClass= "detailheader " ItemStyle-CssClass= "detailitem ">
</asp:BoundField>
<asp:BoundField DataField= "LastLoginDate " HeaderText= "LastLoginDate " ReadOnly= "True " HeaderStyle-CssClass= "detailheader " ItemStyle-CssClass= "detailitem ">
</asp:BoundField>
<asp:BoundField DataField= "LastLockoutDate " HeaderText= "LastLockoutDate " ReadOnly= "True " HeaderStyle-CssClass= "detailheader " ItemStyle-CssClass= "detailitem "> </asp:BoundField>
<asp:BoundField DataField= "LastPasswordChangedDate " HeaderText= "LastPasswordChangedDate "
ReadOnly= "True " HeaderStyle-CssClass= "detailheader " ItemStyle-CssClass= "detailitem "> </asp:BoundField>
<asp:CommandField ButtonType= "button " ShowEditButton= "true " EditText= "Edit User Info " />
</Fields>
</asp:DetailsView>
cs的代码如下
public partial class xingxi : System.Web.UI.Page
{
MembershipUser user;
private void Page_Load(object sender, EventArgs e)
{
user = Membership.GetUser();
UserUpdateMessage.Text = " ";
if (!IsPostBack)
{
ArrayList list = new ArrayList(1);
list.Add(user);
DetailsView1.DataSource = list;
DetailsView1.DataBind();
}
}
protected void DetailsView1_ItemUpdating1(object sender, DetailsViewUpdateEventArgs e)
{
//Need to handle the update manually because MembershipUser does not have a
//parameterless constructor
user.Email = (string)e.NewValues[0];
user.Comment = (string)e.NewValues[1];
user.IsApproved = (bool)e.NewValues[2];
try
{
// Update user info:
Membership.UpdateUser(user);
UserUpdateMessage.Text = "更新成功. ";
e.Cancel = true;
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
}
catch (Exception ex)
{
UserUpdateMessage.Text = "更新失败: " + ex.Message;
e.Cancel = true;
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
}
}
}
[HttpException (0x80004005): The DetailsView 'DetailsView1 ' fired event ModeChanging which wasn 't handled.]
System.Web.UI.WebControls.DetailsView.OnModeChanging(DetailsViewModeEventArgs e) +1511207
System.Web.UI.WebControls.DetailsView.HandleEdit() +64
System.Web.UI.WebControls.DetailsView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +391
System.Web.UI.WebControls.DetailsView.RaisePostBackEvent(String eventArgument) +194
System.Web.UI.WebControls.DetailsView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +174
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102
[解决办法]
在你的代码中有
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
那么你就要处理ModeChanging事件,也就是说你的代码中应该要有
protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e)
{
}
[解决办法]
这么快解决了啊 汗 100分啊
[解决办法]
按钮的COMMANDNAME=update,才能激发该事件
否则激发的是itemcommand
[解决办法]
帮忙顶,接分
[解决办法]
ASP.NET 2.0的这些控件都是设计为通过DataSourceID绑定到DataSourceControl的,如果你要直接绑定到DataSource,那么很多方法就要自己实现,例如翻页等等。如果对应的事件没有实现,那就抛出你所说得异常了。
至于其中的原因,例如翻页吧,DataSourceControl内置了翻页的逻辑,例如如何在IEnumerable中定位到特定的页,因此就不用你写任何代码。但你自己绑定一个IEnumerable上去,GridView没有这样的定位逻辑,你就要自己写代码进行定位。
[解决办法]
membership是不错!很好用!
[解决办法]
因为 ObjectDataSource 内部帮你处理了
membership 黑好用迈? 偶怎么没发现?
[解决办法]
学习,接分