What I am trying to imply is that attaching eventhandlers in the
DataBind() method is not the correct way to do it. (and nor is doing
it in CreateChildControls()).

I would probably try attaching the eventhandlers in the OnInit
override. If that doesn't work, I would expose the GridView's events
as top level events of the Composite control using the Event bubbling
method. For more information, refer to Dino Esposito's article here:
<http://msdn.microsoft.com/en-us/library/aa479016.aspx>

and MSDN: <http://msdn.microsoft.com/en-us/library/aa719734(VS.
71).aspx>

Event bubbling sample: <http://msdn.microsoft.com/en-us/library/
aa720044(VS.71).aspx>


On May 4, 6:50 pm, Cezus <[email protected]> wrote:
> It is possible to attach those in the CreateChildControls but it will
> have the same result, thats why I have chosen to place it in the
> BindData(). With every postback those eventhandlers have to be
> reattached.
>
> Further, there is no cycle or an endless loop. After reattaching the
> eventhandlers it will not execute the eventhandlers again. This have
> something to do with the page lifecycle, it will execute the events
> just once. Ive looked on internet but there is almost no results on
> google where the update button executes the rowediting event instead
> of the rowupdating event.
>
> For more info, there is an demo on
>
> http://test.cezus.nl
>
> click in the demo on edit and then on update and you see there is no
> change in the page because it executes the rowupdating event again.
>
> On 4 mei, 12:45, Cerebrus <[email protected]> wrote:
>
>
>
> > I don't get it at all... Why would you attach your eventhandlers in
> > the BindData() method when you call this method from the Eventhandlers
> > themselves ?
>
> > Don't you see a cycle here ?
>
> > On May 4, 2:21 pm, Cezus <[email protected]> wrote:
>
> > > Hello,
>
> > > I have a problem in my composite control. In this composite control I
> > > create a GridView in one of the TableCells of a Table control. This
> > > GridView has multiple events on it, such as rowediting event,
> > > rowupdating event, rowcancelingedit event.
>
> > > image:http://www.cezus.nl/GridView.JPG
>
> > > [code]
> > >         private void BindData()
> > >         {
> > >             _gvCategories = (GridView)this.FindControl
> > > ("gvCategories");
> > >             _dtCategories = (DataTable)HttpContext.Current.Session
> > > ["dtCategories"];
>
> > >             _gvCategories.DataSource = _dtCategories;
> > >             _gvCategories.AutoGenerateDeleteButton = true;
> > >             _gvCategories.AutoGenerateEditButton = true;
> > >             _gvCategories.RowEditing += new GridViewEditEventHandler
> > > (_gvCategories_RowEditing);
> > >             _gvCategories.RowUpdating += new GridViewUpdateEventHandler
> > > (_gvCategories_RowUpdating);
> > >             _gvCategories.RowDeleting += new GridViewDeleteEventHandler
> > > (_gvCategories_RowDeleting);
> > >             _gvCategories.RowCreated += new GridViewRowEventHandler
> > > (_gvCategories_RowCreated);
> > >             _gvCategories.RowCancelingEdit += new
> > > GridViewCancelEditEventHandler(_gvCategories_RowCancelingEdit);
>
> > >             _gvCategories.DataBind();
> > >         }
>
> > >         void _gvCategories_RowEditing(object sender,
> > > GridViewEditEventArgs e)
> > >         {
> > >             _gvCategories = (GridView)sender;
> > >             _gvCategories.EditIndex = e.NewEditIndex;
> > >             BindData();
> > >         }
>
> > >         void _gvCategories_RowUpdating(object sender,
> > > GridViewUpdateEventArgs e)
> > >         {
> > >             _gvCategories = (GridView)sender;
> > >             _dtCategories = (DataTable)HttpContext.Current.Session
> > > ["dtCategories"];
> > >             GridViewRow row = _gvCategories.Rows[e.RowIndex];
>
> > >             foreach (DataRow dr in _dtCategories.Rows)
> > >             {
> > >                 if (dr.RowState != DataRowState.Deleted)
> > >                 {
> > >                     if (Convert.ToInt32(dr["drID"]) == Convert.ToInt32
> > > (((TextBox)(row.Cells[3].Controls[0])).Text))
> > >                     {
> > >                         dr["ID"] = ((TextBox)(row.Cells[1].Controls
> > > [0])).Text;
> > >                         dr["Categorie"] = ((TextBox)(row.Cells
> > > [2].Controls[0])).Text;
> > >                     }
> > >                 }
> > >             }
> > >             _gvCategories.EditIndex = -1;
> > >             HttpContext.Current.Session["dtCategories"] =
> > > _dtCategories;
>
> > >             BindData();
>
> > >             Button _btnNieuw = (Button)this.FindControl("btnNieuw");
> > >             _btnNieuw.Enabled = true;
>
> > >         }
> > > [/code]
>
> > > If I press on the 'edit' button in the GridView it goes to the
> > > rowediting event. If I press after that on the 'update' button it goes
> > > again through the rowediting event instead of going through the
> > > rowupdating event.
>
> > > I am struggling for 2 days with this, I hope somebody knows a
> > > solution.
>
> > > With Kind Regards,
>
> > > Cees van Altena- Hide quoted text -
>
> - Show quoted text -

Reply via email to