Steve Rose wrote:
> Sorry to beat this subject to death. Using Paul's example of setting a
> fictitious table name as the DataSource when creating a BizObject, I was
> able to get multiple bizobjs working independently on the same table.
>
> self.Connection = self.Application.getConnectionByName("myconn")
> self.bzCatsAll = Cats(self.Connection,DataSource='cats_all')
> self.bzCatsSome = Cats(self.Connection,DataSource='cats_some')
>
> The problem comes when I try to set a grid's DataSource to the fictitious
> table name. I cannot get the grid to display the table data.
I think I found 2 problems (see your code below).
> grid.DataSource = 'cats_all' does not seem to work. Same for 'cats_some'.
> I have pasted in a turn-key example to show you what I've done. Can you
> point our where I have gone wrong? Gmail eats tab stops so I used spaces
> for indenting. Still didn't help much.
>
> Steve Rose
>
> import dabo
> import dabo.dEvents as dEvents
> import dabo.dException as dException
>
> from dabo.dApp import dApp
> from dabo.dLocalize import _
> from dabo.db.dConnectInfo import dConnectInfo
> dabo.ui.loadUI('wx')
>
> class Cats(dabo.biz.dBizobj):
> def afterInit(self):
> self.DataSource = "cats"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
You are setting the DataSource to "cats" in the afterInit() of the
bizobj, which is *after* your setting of the DataSource to either
"cats_all" or "cats_some" is happening.
Move this (and other property settings as well) out of afterInit() and
into initProperties(). initProperties() does the right thing and makes
the default property values as you set there, but lets the property
settings be overridden by sending the props to the constructor.
> self.KeyField = "pkid"
> self.addFrom("cats")
> self.addField("pkid")
> self.addField("name")
> self.addField("color")
>
>
> class CatsPanel(dabo.ui.dPanel):
> def afterInit(self):
> catsGrid1 =
> dabo.ui.dGrid(self,AlternateRowColoring=True,ColumnCount=2,RegID='catsGrid1',SelectionMode
> ="Row",Editable=False,MovableColumns =False,
> Searchable=True,Top=50,Left=50,Height=200,Width=300)
> catsGrid1.DataSource = 'cats_all'
> catsGrid1.Columns[0].DataField = "name"
> catsGrid1.Columns[0].Width = 100
> catsGrid1.Columns[1].DataField = "color"
> catsGrid1.Columns[1].Width = 100
>
>
> class MainForm(dabo.ui.dForm):
> def afterInit(self):
> self.Sizer=vs= dabo.ui.dSizer('v')
> catsPanel = CatsPanel(self)
> self.Caption = "Cats"
>
> self.Connection = self.Application.getConnectionByName("myconn")
> self.bzCatsAll = Cats(self.Connection,DataSource='cats_all')
> self.bzCatsSome = Cats(self.Connection,DataSource='cats_some')
> self.addBizobj(self.bzCatsAll)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...also need to 'self.addBizobj(self.bzCatsSome)'
> self.requery(self.bzCatsAll)
> self.requery(self.bzCatsSome)
>
> # test out the bizObjects:
> print 'name - cats_all:', self.bzCatsAll.Record.name # prints 'Blackie';
> correct
> print 'color -cats_all:', self.bzCatsAll.Record.color # prints 'black';
> correct
> print 'total - cats_all:', self.bzCatsAll.RowCount # prints 6; correct
>
> # navigate in bzCatsSome:
> self.next(self.bzCatsSome)
>
> print 'name - cats_some:', self.bzCatsSome.Record.name # prints 'Brownie';
> correct
> print 'color - cats_some:', self.bzCatsSome.Record.color # prints 'brown'
> ; correct
>
> #check to see if bzCatsAll record pointer moved after bzCatsSome
> navigated:
> print 'name - cats_all:', self.bzCatsAll.Record.name # prints 'Blackie';
> correct
> print 'color -cats_all:', self.bzCatsAll.Record.color # prints 'black';
> correct
>
> vs.append1x(catsPanel)
> self.catsGrid1.update() # no help in getting grid to display data.
> self.catsGrid1.DataSource = ""
> self.catsGrid1.DataSource = 'cats_all' # reasserted grid DataSource but no
> help.
>
>
> if __name__ == "__main__":
> app = dabo.dApp()
>
> # Manages how preferences are saved
> app.BasePrefKey = "dabo.app.minimal.dtForm"
> dabo.settings.MDI = False
> app.MainFormClass = MainForm
>
> ## The following information can be used in various places in your app:
> app.setAppInfo("appShortName", _("Cats Form"))
> app.setAppInfo("appName", _("Cats"))
> app.setAppInfo("appDescription", _("Cats and colors"))
>
> ## Connections:
> dbFileName = ":memory:"
> connInfo = dConnectInfo(Name="myconn",
> DbType="SQLite",Database=dbFileName)
> app.addConnectInfo(connInfo)
>
> ## create database on the fly:
> conn = app.getConnectionByName("myconn")
> curs= conn.getDaboCursor()
> # create tables and testdata:
> scriptList = """
> create table cats (
> pkid integer primary key autoincrement not null,
> name text,
> color text
> );
> insert into cats (name,color) values ('Blackie','black');
> insert into cats (name,color) values ('Brownie','brown');
> insert into cats (name,color) values ('Snowflake','white');
> """.split(";")
> for stmt in scriptList:
> if stmt.strip():
> curs.execute(stmt)
> dabo.infoLog.write(stmt)
>
> app.setup()
> app.start()
_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-users
Searchable Archives: http://leafe.com/archives/search/dabo-users
This message: http://leafe.com/archives/byMID/%(messageid)s