错误:The DetailsView 'DetailsView1' fired event ItemUpdating which wasn't handled. 前台:
<form id="form1" runat="server">
    <div>
        <asp:DetailsView ID="DetailsView1" runat="server"  AutoGenerateRows="False"  Height="50px" Width="125px" OnItemCommand="DetailsView1_ItemCommand" OnModeChanging="DetailsView1_ModeChanging" OnModeChanged="DetailsView1_ModeChanged" OnDataBound="DetailsView1_DataBound" OnPreRender="DetailsView1_PreRender">
            <Fields>
                <asp:TemplateField HeaderText="Name">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("name") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("name") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("name") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Sex">
                    <EditItemTemplate>
                         <asp:DropDownList ID="drpsex" runat="server" DataSource="<%# bindToDrop() %>"  DataTextField="sex"></asp:DropDownList>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("sex") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Bind("sex") %>'></asp:Label>
                       
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                   <ItemTemplate>
                      <asp:Label ID="lblsex" runat="server" Text='<%# Bind("sex") %>'></asp:Label>
                   </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ShowHeader="False">
                    <EditItemTemplate>
                        <asp:Button ID="Button1" runat="server" CausesValidation="True" CommandName="Update"
                            Text="更新" />&nbsp;<asp:Button ID="Button2" runat="server" CausesValidation="False"
                                CommandName="Cancel" Text="取消" />
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Button ID="Button1" runat="server" CausesValidation="False" CommandName="Edit"
                            Text="编辑" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Fields>
        </asp:DetailsView>
    
    </div>
    </form>
后台:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
          if (!this.IsPostBack)
        {
            bindData();
        }    }     public void bindData()
    {
        string strSql = ConfigurationManager.AppSettings["ConnectionString"].ToString();
        SqlConnection con = new SqlConnection(strSql);
        SqlCommand cmd = new SqlCommand("select * from test where id =2",con);
        con.Open();
        SqlDataReader read = cmd.ExecuteReader();
        DetailsView1.DataSource=read;
        DetailsView1.DataBind();
        DropDownList drpsex = DetailsView1.FindControl("drpsex") as DropDownList;
        Label lblsex = DetailsView1.FindControl("lblsex") as Label;
        //SqlDataReader reader = bindToDrop();
        //drpsex.DataSource = reader;
        //drpsex.DataBind();
        //drpsex.SelectedIndex = drpsex.Items.IndexOf(drpsex.Items.FindByText(lblsex.Text.Trim())); //lblsex.Text.Trim();
        
    }
    protected void DetailsView1_ItemCommand(object sender, DetailsViewCommandEventArgs e)
    {
        //if (e.CommandName.Equals("Edit"))//实现一
        //{
        //    DetailsView1.ChangeMode(DetailsViewMode.Edit);
           
        //}
       
        //bindData();
    }
    protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e)
    {
        //DetailsView1.ChangeMode(DetailsViewMode.Edit);
        //bindData();
        //实现二
        if (DetailsView1.CurrentMode == DetailsViewMode.ReadOnly)
        {
            DetailsView1.ChangeMode(DetailsViewMode.Edit);
        }
        else if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
        {
            DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
        }
        bindData();
        
    }    public SqlDataReader bindToDrop()
    {
        string strSql = ConfigurationManager.AppSettings["ConnectionString"].ToString();
        SqlConnection con = new SqlConnection(strSql);
        SqlCommand cmd = new SqlCommand("select distinct sex from test", con);
        con.Open();
        SqlDataReader read = cmd.ExecuteReader();
        return read;
    }    protected void DetailsView1_ModeChanged(object sender, EventArgs e)
    {
       
    }
    protected void DetailsView1_DataBound(object sender, EventArgs e)
    {
        
    }
    protected void DetailsView1_PreRender(object sender, EventArgs e)
    {
        //实现dropdownlist 在编辑的时候显示一样的值
        if (this.IsPostBack)
        {
            if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
            {
                DropDownList drpsex = DetailsView1.FindControl("drpsex") as DropDownList;
                Label lblsex = DetailsView1.FindControl("lblsex") as Label;
                drpsex.DataSource = bindToDrop();
                drpsex.DataBind();
                drpsex.SelectedValue = lblsex.Text.Trim();
            }
        }
    }
    protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
    {    }
}

解决方案 »

  1.   

    页面中的模板中对应编辑项中的那个DropDownList的控件中不需要绑定;在后台的.aspx.cs中写入以下代码就可以啦!(其中DetailsView1_DataBound是对应的事件) /// <summary>
        /// 在数据绑定后的事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void DetailsView1_DataBound(object sender, EventArgs e)
        {
           
            if (this.DetailsView1.CurrentMode==DetailsViewMode.Edit)//判断当前的状态如果为编辑状态就执行以下代码
            {
                Label lb = this.DetailsView1.Rows[5].FindControl("Label3") as Label;//寻找编辑项中的Lable3的控件(其中有本记录的类型编号)
                DropDownList ddlpt = this.DetailsView1.Rows[5].FindControl("DropDownList1") as DropDownList;//寻找下拉框控件            ddlpt.DataSource = ptm.Selectall();//绑定数据源Selectall()方法是查询手机类型的数据
                ddlpt.DataTextField = "Ptname";//绑定显示值
                ddlpt.DataValueField = "Ptid";//绑定实际值
                ddlpt.SelectedValue = lb.Text.ToString();//绑定当前显示的值
                ddlpt.DataBind();//绑定        }