DetailsView的wasn't handled问题

pssszylp 2007-07-17 06:39:23
郁闷,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
...全文
261 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jinglecat 2007-07-17
  • 打赏
  • 举报
回复
因为 ObjectDataSource 内部帮你处理了

membership 黑好用迈? 偶怎么没发现?
chuxue1342 2007-07-17
  • 打赏
  • 举报
回复
membership是不错!很好用!
cat_hsfz 2007-07-17
  • 打赏
  • 举报
回复
ASP.NET 2.0的这些控件都是设计为通过DataSourceID绑定到DataSourceControl的,如果你要直接绑定到DataSource,那么很多方法就要自己实现,例如翻页等等。如果对应的事件没有实现,那就抛出你所说得异常了。

至于其中的原因,例如翻页吧,DataSourceControl内置了翻页的逻辑,例如如何在IEnumerable中定位到特定的页,因此就不用你写任何代码。但你自己绑定一个IEnumerable上去,GridView没有这样的定位逻辑,你就要自己写代码进行定位。
godgreat 2007-07-17
  • 打赏
  • 举报
回复
帮忙顶,接分
honkerhero 2007-07-17
  • 打赏
  • 举报
回复
按钮的COMMANDNAME=update,才能激发该事件

否则激发的是itemcommand
pssszylp 2007-07-17
  • 打赏
  • 举报
回复
我自己解决的,还没结帖呢,问题是解决了,道理我不明白啊!!!
shun1984a 2007-07-17
  • 打赏
  • 举报
回复
这么快解决了啊 汗 100分啊
pssszylp 2007-07-17
  • 打赏
  • 举报
回复
解决了,我用了个DataSourceID,绑了System.Web.Security.MembershipUser就可以了.

amandag(高歌),那个ChangeMode是个方法吧?

我还是不明白,直接绑个ArrayList为什么就wasn't handled??
非得再弄个ObjectDataSource....DetailsView跟ObjectDataSource勾结才没有问题.
我是个菜鸟,难道是我绑ArrayList有错,可是有错的话,为什么开始能正常显示,点了eidt后就出错了?

badui了一下好象很多人CommandField 这个东西都是GridView出错,说什么要绑ObjectDataSource,GridView的分页排序才正常.
现在发现,原来绑ObjectDataSource是王道啊.
amandag 2007-07-17
  • 打赏
  • 举报
回复
在你的代码中有
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);

那么你就要处理ModeChanging事件,也就是说你的代码中应该要有
protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e)
{

}
whw123456 2007-07-17
  • 打赏
  • 举报
回复
学习,接分

62,046

社区成员

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

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

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

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