Detailsview with objectdatasource

Discussion in 'ASP .Net Web Controls' started by Paul S, Apr 1, 2010.

  1. Paul S

    Paul S Guest

    I'm using a detailsview with an objectdatasource. When I click Update to
    save my edited record ItemUpdating gets called but e.NewValues.Count = 0.

    What am I doing wrong?

    The design is a dropdown ddlEvent where a date is selected. With taht as a
    key the event to be edited is selected in the DetailsView


    protected void Page_Load(object sender, EventArgs e)
    {
    if (!this.IsPostBack)
    {
    try
    {
    MatchCollection matches = new MatchCollection();
    matches.FillWithEventsAfter(new DateTime(2009, 1, 1), 10);

    this.ddlEvent.DataValueField = "MatchId";
    this.ddlEvent.DataTextField = "DateOfEvent";
    this.ddlEvent.DataSource = matches;
    this.ddlEvent.DataBind();

    this.BindDetailsView();

    }
    catch (Exception ex)
    {
    Response.Write(ex.ToString());
    }
    }
    }

    /// <summary>
    /// New date has been selected so refresh view
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ddlEvent_SelectedIndexChanged(object sender,
    EventArgs e)
    {
    //Response.Write(this.ddlEvent.SelectedValue.ToString());
    this.BindDetailsView();
    }

    private void BindDetailsView()
    {
    MatchCollection matches = new MatchCollection();
    matches.Fill(int.Parse(this.ddlEvent.SelectedValue));

    this.dvEvent.DataSource = matches;
    this.dvEvent.DataBind();
    this.dvEvent.DefaultMode = DetailsViewMode.ReadOnly;
    }

    protected void dvEvent_ModeChanged(object sender, EventArgs e)
    {
    }

    protected void dvEvent_ModeChanging(object sender,
    DetailsViewModeEventArgs e)
    {
    this.dvEvent.ChangeMode(e.NewMode);
    this.BindDetailsView();
    }

    protected void dvEvent_ItemCommand(object sender,
    DetailsViewCommandEventArgs e)
    {
    if (e.CommandName.Equals("edit",
    StringComparison.InvariantCultureIgnoreCase))
    {
    }
    if (e.CommandName.Equals("Cancel",
    StringComparison.InvariantCultureIgnoreCase))
    {
    ;
    }
    if (e.CommandName.Equals("New",
    StringComparison.InvariantCultureIgnoreCase))
    ;

    if (e.CommandName.Equals("update",
    StringComparison.InvariantCultureIgnoreCase))
    {
    this.dvEvent.UpdateItem(true);
    }
    }

    protected void dvEvent_ItemUpdating(object sender,
    DetailsViewUpdateEventArgs e)
    {
    MatchCollection matches = new MatchCollection();
    matches.Fill(int.Parse(this.ddlEvent.SelectedValue));
    if (matches.Count < 1)
    return;

    MatchInfo mi = matches[0];
    mi.Description = e.NewValues["Description"].ToString();
    mi.CourseId = (int)e.NewValues["CourseId"];
    // etc
    try
    {
    matches.Update();
    this.dvEvent.ChangeMode(DetailsViewMode.ReadOnly);
    }
    catch (Exception)
    {
    }
    // error handling
    }



    Thanks
    Paul S
     
    Paul S, Apr 1, 2010
    #1
    1. Advertisements

  2. Paul S

    Steven Cheng Guest

    Hi Paul,

    From your description, the DetailsView.ItemUpdating event doesn't contain
    the proper values(in the NewValues collection) when performing updating,
    correct?

    I'm wondering whether it is a datasource or control specific issue. Have
    you tried directly using a SqlDataSource control for the DetailsView
    connection or directly connect the DetailsView to datasource control
    without filtering from the dropdownlist to see whether it makes any
    difference?

    I've tried a simple SqlDataSource case with the ItemUpdating event below
    which shows all the parameters in both OldValues and NewValues collection:

    >>>>>>>>>>>>>>>>>>>>>>>>>>>

    protected void DetailsView2_ItemUpdating(object sender,
    DetailsViewUpdateEventArgs e)
    {
    Response.Write("<br/>Old values:");
    foreach (var oldp in e.OldValues.Keys)
    {
    Response.Write("<br/>" + oldp);
    }

    Response.Write("<br/>New values:");
    foreach (var newp in e.NewValues.Keys)
    {
    Response.Write("<br/>" + newp);
    }
    }
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

    Sincerely,

    Steven Cheng

    Microsoft MSDN Online Support Lead




    --------------------
    >Thread-Topic: Detailsview with objectdatasource
    >From: =?Utf-8?B?UGF1bCBT?= <>
    >Subject: Detailsview with objectdatasource
    >Date: Thu, 1 Apr 2010 08:47:01 -0700
    >
    >I'm using a detailsview with an objectdatasource. When I click Update to
    >save my edited record ItemUpdating gets called but e.NewValues.Count = 0.
    >
    >What am I doing wrong?
    >
    >The design is a dropdown ddlEvent where a date is selected. With taht as a
    >key the event to be edited is selected in the DetailsView
    >
    >
    >protected void Page_Load(object sender, EventArgs e)
    >{
    >if (!this.IsPostBack)
    >{
    >try
    >{
    >MatchCollection matches = new MatchCollection();
    >matches.FillWithEventsAfter(new DateTime(2009, 1, 1), 10);
    >
    >this.ddlEvent.DataValueField = "MatchId";
    >this.ddlEvent.DataTextField = "DateOfEvent";
    >this.ddlEvent.DataSource = matches;
    >this.ddlEvent.DataBind();
    >
    >this.BindDetailsView();
    >
    >}
    >catch (Exception ex)
    >{
    >Response.Write(ex.ToString());
    >}
    >}
    >}
    >
    >/// <summary>
    >/// New date has been selected so refresh view
    >/// </summary>
    >/// <param name="sender"></param>
    >/// <param name="e"></param>
    >protected void ddlEvent_SelectedIndexChanged(object sender,
    >EventArgs e)
    >{
    >//Response.Write(this.ddlEvent.SelectedValue.ToString());
    >this.BindDetailsView();
    >}
    >
    >private void BindDetailsView()
    >{
    >MatchCollection matches = new MatchCollection();
    >matches.Fill(int.Parse(this.ddlEvent.SelectedValue));
    >
    >this.dvEvent.DataSource = matches;
    >this.dvEvent.DataBind();
    >this.dvEvent.DefaultMode = DetailsViewMode.ReadOnly;
    >}
    >
    >protected void dvEvent_ModeChanged(object sender, EventArgs e)
    >{
    >}
    >
    >protected void dvEvent_ModeChanging(object sender,
    >DetailsViewModeEventArgs e)
    >{
    >this.dvEvent.ChangeMode(e.NewMode);
    >this.BindDetailsView();
    >}
    >
    >protected void dvEvent_ItemCommand(object sender,
    >DetailsViewCommandEventArgs e)
    >{
    >if (e.CommandName.Equals("edit",
    >StringComparison.InvariantCultureIgnoreCase))
    >{
    >}
    >if (e.CommandName.Equals("Cancel",
    >StringComparison.InvariantCultureIgnoreCase))
    >{
    >;
    >}
    >if (e.CommandName.Equals("New",
    >StringComparison.InvariantCultureIgnoreCase))
    >;
    >
    >if (e.CommandName.Equals("update",
    >StringComparison.InvariantCultureIgnoreCase))
    >{
    >this.dvEvent.UpdateItem(true);
    >}
    >}
    >
    >protected void dvEvent_ItemUpdating(object sender,
    >DetailsViewUpdateEventArgs e)
    >{
    >MatchCollection matches = new MatchCollection();
    >matches.Fill(int.Parse(this.ddlEvent.SelectedValue));
    >if (matches.Count < 1)
    >return;
    >
    >MatchInfo mi = matches[0];
    >mi.Description = e.NewValues["Description"].ToString();
    >mi.CourseId = (int)e.NewValues["CourseId"];
    >// etc
    >try
    >{
    >matches.Update();
    >this.dvEvent.ChangeMode(DetailsViewMode.ReadOnly);
    >}
    >catch (Exception)
    >{
    >}
    >// error handling
    >}
    >
    >
    >
    >Thanks
    >Paul S
    >
     
    Steven Cheng, Jun 23, 2010
    #2
    1. Advertisements

  3. Paul S

    Paul S Guest

    Hi Steven
    I haven't tried the SqlDataSource but I'll do that

    Thanks
    Paul S

    ""Steven Cheng"" wrote:

    > Hi Paul,
    >
    > From your description, the DetailsView.ItemUpdating event doesn't contain
    > the proper values(in the NewValues collection) when performing updating,
    > correct?
    >
    > I'm wondering whether it is a datasource or control specific issue. Have
    > you tried directly using a SqlDataSource control for the DetailsView
    > connection or directly connect the DetailsView to datasource control
    > without filtering from the dropdownlist to see whether it makes any
    > difference?
    >
    > I've tried a simple SqlDataSource case with the ItemUpdating event below
    > which shows all the parameters in both OldValues and NewValues collection:
    >
    > >>>>>>>>>>>>>>>>>>>>>>>>>>>

    > protected void DetailsView2_ItemUpdating(object sender,
    > DetailsViewUpdateEventArgs e)
    > {
    > Response.Write("<br/>Old values:");
    > foreach (var oldp in e.OldValues.Keys)
    > {
    > Response.Write("<br/>" + oldp);
    > }
    >
    > Response.Write("<br/>New values:");
    > foreach (var newp in e.NewValues.Keys)
    > {
    > Response.Write("<br/>" + newp);
    > }
    > }
    > <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    >
    > Sincerely,
    >
    > Steven Cheng
    >
    > Microsoft MSDN Online Support Lead
    >
    >
    >
    >
    > --------------------
    > >Thread-Topic: Detailsview with objectdatasource
    > >From: =?Utf-8?B?UGF1bCBT?= <>
    > >Subject: Detailsview with objectdatasource
    > >Date: Thu, 1 Apr 2010 08:47:01 -0700
    > >
    > >I'm using a detailsview with an objectdatasource. When I click Update to
    > >save my edited record ItemUpdating gets called but e.NewValues.Count = 0.
    > >
    > >What am I doing wrong?
    > >
    > >The design is a dropdown ddlEvent where a date is selected. With taht as a
    > >key the event to be edited is selected in the DetailsView
    > >
    > >
    > >protected void Page_Load(object sender, EventArgs e)
    > >{
    > >if (!this.IsPostBack)
    > >{
    > >try
    > >{
    > >MatchCollection matches = new MatchCollection();
    > >matches.FillWithEventsAfter(new DateTime(2009, 1, 1), 10);
    > >
    > >this.ddlEvent.DataValueField = "MatchId";
    > >this.ddlEvent.DataTextField = "DateOfEvent";
    > >this.ddlEvent.DataSource = matches;
    > >this.ddlEvent.DataBind();
    > >
    > >this.BindDetailsView();
    > >
    > >}
    > >catch (Exception ex)
    > >{
    > >Response.Write(ex.ToString());
    > >}
    > >}
    > >}
    > >
    > >/// <summary>
    > >/// New date has been selected so refresh view
    > >/// </summary>
    > >/// <param name="sender"></param>
    > >/// <param name="e"></param>
    > >protected void ddlEvent_SelectedIndexChanged(object sender,
    > >EventArgs e)
    > >{
    > >//Response.Write(this.ddlEvent.SelectedValue.ToString());
    > >this.BindDetailsView();
    > >}
    > >
    > >private void BindDetailsView()
    > >{
    > >MatchCollection matches = new MatchCollection();
    > >matches.Fill(int.Parse(this.ddlEvent.SelectedValue));
    > >
    > >this.dvEvent.DataSource = matches;
    > >this.dvEvent.DataBind();
    > >this.dvEvent.DefaultMode = DetailsViewMode.ReadOnly;
    > >}
    > >
    > >protected void dvEvent_ModeChanged(object sender, EventArgs e)
    > >{
    > >}
    > >
    > >protected void dvEvent_ModeChanging(object sender,
    > >DetailsViewModeEventArgs e)
    > >{
    > >this.dvEvent.ChangeMode(e.NewMode);
    > >this.BindDetailsView();
    > >}
    > >
    > >protected void dvEvent_ItemCommand(object sender,
    > >DetailsViewCommandEventArgs e)
    > >{
    > >if (e.CommandName.Equals("edit",
    > >StringComparison.InvariantCultureIgnoreCase))
    > >{
    > >}
    > >if (e.CommandName.Equals("Cancel",
    > >StringComparison.InvariantCultureIgnoreCase))
    > >{
    > >;
    > >}
    > >if (e.CommandName.Equals("New",
    > >StringComparison.InvariantCultureIgnoreCase))
    > >;
    > >
    > >if (e.CommandName.Equals("update",
    > >StringComparison.InvariantCultureIgnoreCase))
    > >{
    > >this.dvEvent.UpdateItem(true);
    > >}
    > >}
    > >
    > >protected void dvEvent_ItemUpdating(object sender,
    > >DetailsViewUpdateEventArgs e)
    > >{
    > >MatchCollection matches = new MatchCollection();
    > >matches.Fill(int.Parse(this.ddlEvent.SelectedValue));
    > >if (matches.Count < 1)
    > >return;
    > >
    > >MatchInfo mi = matches[0];
    > >mi.Description = e.NewValues["Description"].ToString();
    > >mi.CourseId = (int)e.NewValues["CourseId"];
    > >// etc
    > >try
    > >{
    > >matches.Update();
    > >this.dvEvent.ChangeMode(DetailsViewMode.ReadOnly);
    > >}
    > >catch (Exception)
    > >{
    > >}
    > >// error handling
    > >}
    > >
    > >
    > >
    > >Thanks
    > >Paul S
    > >

    >
    > .
    >
     
    Paul S, Jun 25, 2010
    #3
  4. Paul S

    Steven Cheng Guest

    Thanks for your reply Paul,

    Yes, by checking different controls can help verify whether the problem is
    specific to the objectdatasource or the data access class it uses
    internally.

    Sincerely,

    Steven Cheng

    Microsoft MSDN Online Support Lead
    --------------------
    >From: =?Utf-8?B?UGF1bCBT?= <>
    >References: <>

    <>
    >Subject: RE: Detailsview with objectdatasource
    >Date: Fri, 25 Jun 2010 01:41:54 -0700


    >
    >Hi Steven
    >I haven't tried the SqlDataSource but I'll do that
    >
    >Thanks
    >Paul S
    >
    >""Steven Cheng"" wrote:
    >
    >> Hi Paul,
    >>
    >> From your description, the DetailsView.ItemUpdating event doesn't

    contain
    >> the proper values(in the NewValues collection) when performing updating,
    >> correct?
    >>
    >> I'm wondering whether it is a datasource or control specific issue. Have
    >> you tried directly using a SqlDataSource control for the DetailsView
    >> connection or directly connect the DetailsView to datasource control
    >> without filtering from the dropdownlist to see whether it makes any
    >> difference?
    >>
    >> I've tried a simple SqlDataSource case with the ItemUpdating event below
    >> which shows all the parameters in both OldValues and NewValues

    collection:
    >>
    >> >>>>>>>>>>>>>>>>>>>>>>>>>>>

    >> protected void DetailsView2_ItemUpdating(object sender,
    >> DetailsViewUpdateEventArgs e)
    >> {
    >> Response.Write("<br/>Old values:");
    >> foreach (var oldp in e.OldValues.Keys)
    >> {
    >> Response.Write("<br/>" + oldp);
    >> }
    >>
    >> Response.Write("<br/>New values:");
    >> foreach (var newp in e.NewValues.Keys)
    >> {
    >> Response.Write("<br/>" + newp);
    >> }
    >> }
    >> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    >>
    >> Sincerely,
    >>
    >> Steven Cheng
    >>
    >> Microsoft MSDN Online Support Lead
    >>
    >>
    >>
    >>
    >> --------------------
    >> >Thread-Topic: Detailsview with objectdatasource
    >> >From: =?Utf-8?B?UGF1bCBT?= <>
    >> >Subject: Detailsview with objectdatasource
    >> >Date: Thu, 1 Apr 2010 08:47:01 -0700
    >> >
    >> >I'm using a detailsview with an objectdatasource. When I click Update to
    >> >save my edited record ItemUpdating gets called but e.NewValues.Count =

    0.
    >> >
    >> >What am I doing wrong?
    >> >
    >> >The design is a dropdown ddlEvent where a date is selected. With taht

    as a
    >> >key the event to be edited is selected in the DetailsView
    >> >
    >> >
    >> >protected void Page_Load(object sender, EventArgs e)
    >> >{
    >> >if (!this.IsPostBack)
    >> >{
    >> >try
    >> >{
    >> >MatchCollection matches = new MatchCollection();
    >> >matches.FillWithEventsAfter(new DateTime(2009, 1, 1), 10);
    >> >
    >> >this.ddlEvent.DataValueField = "MatchId";
    >> >this.ddlEvent.DataTextField = "DateOfEvent";
    >> >this.ddlEvent.DataSource = matches;
    >> >this.ddlEvent.DataBind();
    >> >
    >> >this.BindDetailsView();
    >> >
    >> >}
    >> >catch (Exception ex)
    >> >{
    >> >Response.Write(ex.ToString());
    >> >}
    >> >}
    >> >}
    >> >
    >> >/// <summary>
    >> >/// New date has been selected so refresh view
    >> >/// </summary>
    >> >/// <param name="sender"></param>
    >> >/// <param name="e"></param>
    >> >protected void ddlEvent_SelectedIndexChanged(object sender,
    >> >EventArgs e)
    >> >{
    >> >//Response.Write(this.ddlEvent.SelectedValue.ToString());
    >> >this.BindDetailsView();
    >> >}
    >> >
    >> >private void BindDetailsView()
    >> >{
    >> >MatchCollection matches = new MatchCollection();
    >> >matches.Fill(int.Parse(this.ddlEvent.SelectedValue));
    >> >
    >> >this.dvEvent.DataSource = matches;
    >> >this.dvEvent.DataBind();
    >> >this.dvEvent.DefaultMode = DetailsViewMode.ReadOnly;
    >> >}
    >> >
    >> >protected void dvEvent_ModeChanged(object sender, EventArgs e)
    >> >{
    >> >}
    >> >
    >> >protected void dvEvent_ModeChanging(object sender,
    >> >DetailsViewModeEventArgs e)
    >> >{
    >> >this.dvEvent.ChangeMode(e.NewMode);
    >> >this.BindDetailsView();
    >> >}
    >> >
    >> >protected void dvEvent_ItemCommand(object sender,
    >> >DetailsViewCommandEventArgs e)
    >> >{
    >> >if (e.CommandName.Equals("edit",
    >> >StringComparison.InvariantCultureIgnoreCase))
    >> >{
    >> >}
    >> >if (e.CommandName.Equals("Cancel",
    >> >StringComparison.InvariantCultureIgnoreCase))
    >> >{
    >> >;
    >> >}
    >> >if (e.CommandName.Equals("New",
    >> >StringComparison.InvariantCultureIgnoreCase))
    >> >;
    >> >
    >> >if (e.CommandName.Equals("update",
    >> >StringComparison.InvariantCultureIgnoreCase))
    >> >{
    >> >this.dvEvent.UpdateItem(true);
    >> >}
    >> >}
    >> >
    >> >protected void dvEvent_ItemUpdating(object sender,
    >> >DetailsViewUpdateEventArgs e)
    >> >{
    >> >MatchCollection matches = new MatchCollection();
    >> >matches.Fill(int.Parse(this.ddlEvent.SelectedValue));
    >> >if (matches.Count < 1)
    >> >return;
    >> >
    >> >MatchInfo mi = matches[0];
    >> >mi.Description = e.NewValues["Description"].ToString();
    >> >mi.CourseId = (int)e.NewValues["CourseId"];
    >> >// etc
    >> >try
    >> >{
    >> >matches.Update();
    >> >this.dvEvent.ChangeMode(DetailsViewMode.ReadOnly);
    >> >}
    >> >catch (Exception)
    >> >{
    >> >}
    >> >// error handling
    >> >}
    >> >
    >> >
    >> >
    >> >Thanks
    >> >Paul S
    >> >

    >>
    >> .
    >>

    >
     
    Steven Cheng, Jun 28, 2010
    #4
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?Utf-8?B?SmltIEhhbW1vbmQ=?=

    DetailsView and ObjectDataSource - how to get updated object

    =?Utf-8?B?SmltIEhhbW1vbmQ=?=, Oct 4, 2005, in forum: ASP .Net
    Replies:
    12
    Views:
    8,891
    =?Utf-8?B?SmltIEhhbW1vbmQ=?=
    Oct 18, 2005
  2. =?Utf-8?B?Q1dXb25n?=
    Replies:
    3
    Views:
    4,345
    Wiktor Zychla [C# MVP]
    Jan 5, 2006
  3. Spotnick
    Replies:
    0
    Views:
    1,708
    Spotnick
    Jan 21, 2006
  4. J055
    Replies:
    1
    Views:
    2,120
    Steven Cheng[MSFT]
    Apr 5, 2006
  5. =?Utf-8?B?RGVuaXMgU29oZXQ=?=

    Error with ObjectDataSource and DetailsView - conversion error

    =?Utf-8?B?RGVuaXMgU29oZXQ=?=, Mar 28, 2007, in forum: ASP .Net
    Replies:
    0
    Views:
    595
    =?Utf-8?B?RGVuaXMgU29oZXQ=?=
    Mar 28, 2007
  6. Bill Gower

    DetailsView and ObjectDataSource

    Bill Gower, Aug 30, 2007, in forum: ASP .Net
    Replies:
    0
    Views:
    524
    Bill Gower
    Aug 30, 2007
  7. Seth Williams

    DetailsView - ObjectDataSource question

    Seth Williams, Aug 17, 2008, in forum: ASP .Net
    Replies:
    1
    Views:
    477
  8. Feege
    Replies:
    0
    Views:
    796
    Feege
    Dec 20, 2005
Loading...