a lot of ideas - many thanks to all.
i will try it during the next days!
2011/12/21 apple <[email protected]>
> I missed a bit......[I did say it was a bit fiddly!]
>
> You still need to refresh the grid when the dialog box closes. To do
> this I replaced the LOAD calls with load2 which adds a url to the
> component:
>
> def load2(**args):
> """ calls LOAD and sets url attribute to enable easy refresh of
> the component """
> s=Storage(**args)
> if s.url: url=s.url
> else: url=URL(c=s.c, f=s.f, args=s.args, vars=s.vars,
> extension=s.extension)
> return LOAD(_url=url, **args)
>
> ###################################################################################
> Then in the view:
>
> // refresh a web2py component using url attribute
> function refresh(component) {
> web2py_ajax_page("get", $('#'+component).attr("url"), null ,
> component)
> }
> #################################################
> and in the controller you add "refresh('gridid')" to v._onacceptjs.
>
> If you need to you can refresh other components in the same way e.g.
> if your edit form has a count of the rows on the grid then you might
> want to refresh it.
>
> Thats it!!!
>
> On Dec 21, 8:03 pm, apple <[email protected]> wrote:
> > I have done something similar to what you are looking for but it was a
> > little fiddly in places (if someone can suggest a better way I would
> > be delighted!). My application had some extra functionality but the
> > gist of it is:
> >
> > You have a form and a grid. You can put these on the same page easily
> > using LOAD component.
> >
> > {{=LOAD(f='edit.load', ajax=True, args=.....}}
> > {{=LOAD(f='grid.load', ajax=True, args=.....}}
> >
> > Now you have them on the same page.
> >
> > ###########################################
> > But when you add/edit a grid row then you have 2 forms and 2 submit
> > buttons on the page which is odd. So I used a dialog box for the add/
> > edit functions. This is actually quite easy as the majority of the
> > code is already included in web2py.
> >
> > In the view you do this:
> >
> > // create dialogbox
> > document.write("<div id='dialogdiv' style='display:none'></div>")
> > $(document).ready(function(){
> > $('#dialogdiv').dialog({autoOpen : false, modal : false, width :
> > 'auto'});})
> >
> > // open url in dialog box
> > function dialog(url) {
> > web2py_ajax_page("get", url, {_newformjs:"$
> > ('#dialogdiv').dialog('open')"} , 'dialogdiv')
> >
> > }
> >
> > Now if you pass any url to the javascript dialog function it will call
> > the controller and open the form in a dialog box; and return any form
> > errors inside the dialog box. And only half a dozen lines of code!!
> >
> > #######################################
> > Now you need to make the form open and close.
> >
> > In the edit controller (for person) you do this:
> >
> > if form.process(.....).accepted:
> > response.js=v._onacceptjs
> > return
> > elif form.errors:
> > pass
> > else:
> > response.js=v._newformjs
> > ############################################################
> > and in the grid controller you setup the dialog close and rewire the
> > buttons
> >
> > def dialog(url):
> > """ returns javascript to show the view as a dialog box """
> > return "dialog("+quote(url)+"); return false;"
> >
> > def grid():
> > editvars['_onacceptjs']="$('#dialogdiv').dialog('close');"
> >
> > links.append(lambda row: A(SPAN(_class='ui-icon ui-icon-pencil'),
> > SPAN('Edit',_class='ui-button-
> > text',_title='Edit'),
> > _onclick=dialog(URL(editcontroller,
> > vars=editvars, args=[a.tablename, row.id])),
> > _class='ui-button-text-icon-primary',
> > _id='edit'))
> >
> > On Dec 21, 1:54 pm, Cliff <[email protected]> wrote:
> >
> >
> >
> >
> >
> >
> >
> > > Remember web2py uses the term 'form' in a very specific way.
> >
> > > So don't think about a web2py form for CRUD operations on child
> > > records. You need a way to dynamically update the web page so it can
> > > manage the child records. Web2py provides several approaches to this
> > > problem.
> >
> > > The image blog example in the book outlines a design approach that
> > > will solve your problem.
> http://web2py.com/books/default/chapter/29/3#An-image-blog
> >
> > > Also look here for other solutions:
> http://web2py.com/books/default/chapter/29/11#The-ajax-functionhttp:/...
> >
> > > On Dec 21, 1:22 am, Martin Weissenboeck <[email protected]> wrote:
> >
> > > > Ok, thank you - I will try it.
> >
> > > > 2011/12/21 Nik Go <[email protected]>
> >
> > > > > Martin,
> >
> > > > > I have a feeling that what you're looking is "multi-form updates"
> (try to
> > > > > search for that term) where a parent record (your "person") and
> child
> > > > > record (your "cvrows") are updated simultaneously.
> >
> > > > > On Wednesday, December 21, 2011, Jim Steil wrote:
> >
> > > > >> have you looked at SQLFORM.smartgrid?
> >
> > > > >> -Jim
> >
> > > > >> On 12/20/2011 1:39 PM, Martin Weissenboeck wrote:
> >
> > > > >> Thanks for all hints, I have found some new ideas and I will try
> a ot of
> > > > >> new things.
> >
> > > > >> But -may I describe my problem in detail?
> > > > >> There should be a website for persons who want to apply for a
> job.
> >
> > > > >> My present solution:
> > > > >> Table "person" contains name, date of birth, phone number and so
> on.
> > > > >> Table "cv" (curriculum vitae) contains for each person zero or
> more rows.
> > > > >> Each row consists of the dates of the start and the end of the
> occupation
> > > > >> and some details about the occupation.
> >
> > > > >> Page one is a SQLFORM of table "person" with a submit button. If
> the form
> > > > >> is filled without errors the user is redirected to the second
> page. There
> > > > >> is a SQLFORM.grid of table "cv" on this page. Of course person.idfrom
> > > > >> page one is used on page two. Page two has it's own submit button.
> >
> > > > >> My question:
> > > > >> It would be nice to have both forms (the form for the person and
> the form
> > > > >> for some rows of cv) on one page with only one submit button. Is
> there any
> > > > >> way to concatanate these two forms?
> >
> > > > >> 2011/12/19 Cliff <[email protected]>
> >
> > > > >>> Martin,
> > > > >>> There has been discussion about manipulating grid. Search for
> threads
> > > > >>> containing form.create()
> >
> > > > >>> Also perhaps Anthony will chime in. He knows this stuff pretty
> well.
> >
> > > > >>> apple,
> > > > >>> > Surely the grid is just a grid and does not have a submit
> button?
> >
> > > > >>> SQLFORM.grid is much more than that.
> >
> > > > >>>
> http://web2py.com/books/default/chapter/29/7#SQLFORM.grid-and-SQLFORM...)
> >
> > > > >>> On Dec 19, 9:48 am, apple <[email protected]> wrote:
> > > > >>> > Surely the grid is just a grid and does not have a submit
> button?
> >
> > > > >>> > Do you mean that you have a grid linked to a form and you want
> to
> > > > >>> > refresh it when the form is submitted?
> >
> > > > >>> > On Dec 18, 9:10 pm, Martin Weissenboeck <[email protected]>
> wrote:
> >
> > > > >>> > > Hi,
> > > > >>> > > I have one form created with SQLFORM and another form
> created with
> > > > >>> > > SQLFORM.grid. Each form has its own submit-button.
> > > > >>> > > Is there a simple way to concatanate these forms to one
> form, which
> > > > >>> could
> > > > >>> > > be sent with one submit-button?
> >
> > > > >>> > > Regards, Martin
>