首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

DetailsView的wasn't handled有关问题

2012-03-19 
DetailsView的wasnt handled问题郁闷,baidu不到,只好来问了.错误提示是TheDetailsViewDetailsView1firede

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 黑好用迈? 偶怎么没发现?
[解决办法]
学习,接分

热点排行
Bad Request.