if you are working w sql server make a stored proc that dous the filtering,
that way only the filtered data is sent. (you could do it as a sql string
from code but this gives troubles with ' ...
example of sp (i automized those things here would be to much work to do
this for 30 tables otherwise)
(and it's easyer to work w than it looks ;p )
/* Stored Procedure FilterColl tblDocument*/
CREATE PROCEDURE spFilterColltblDocument
-- FK tblDocuType.DOCTID
@docDOCTID int,
@blndocDOCTID bit,
-- FK tblDossier.DOSID
@docDOSID int,
@blndocDOSID bit,
@DocNr varchar(50),
@blnDocNr bit,
@docTotBedragExcl float,
@blndocTotBedragExcl bit,
@docTotBtw float,
@blndocTotBtw bit,
@docAlgOms varchar(2000),
@blndocAlgOms bit,
@docOref varchar(50),
@blndocOref bit,
@docUref varchar(50),
@blndocUref bit
As SELECT *
FROM tblDocument
WHERE (docDOCTID = @docDOCTID OR @blndocDOCTID = 0)
AND
(docDOSID = @docDOSID OR @blndocDOSID = 0)
AND
(DocNr like @DocNr OR @blnDocNr = 0)
AND
(docTotBedragExcl = @docTotBedragExcl OR @blndocTotBedragExcl = 0)
AND
(docTotBtw = @docTotBtw OR @blndocTotBtw = 0)
AND
(docAlgOms like @docAlgOms OR @blndocAlgOms = 0)
AND
(docOref like @docOref OR @blndocOref = 0)
AND
(docUref like @docUref OR @blndocUref = 0)
RETURN
GO
Public Function FilterDocument(Optional ByVal intdocDOCTID AS Integer = 0,
Optional Byval blnintdocDOCTID AS Boolean = False, Optional ByVal
intdocDOSID AS Integer = 0, Optional Byval blnintdocDOSID AS Boolean =
False, Optional ByVal strDocNr AS String = "", Optional Byval blnstrDocNr AS
Boolean = False, Optional ByVal dbldocTotBedragExcl AS Double = 0, Optional
Byval blndbldocTotBedragExcl AS Boolean = False, Optional ByVal dbldocTotBtw
AS Double = 0, Optional Byval blndbldocTotBtw AS Boolean = False, Optional
ByVal strdocAlgOms AS String = "", Optional Byval blnstrdocAlgOms AS Boolean
= False, Optional ByVal strdocOref AS String = "", Optional Byval
blnstrdocOref AS Boolean = False, Optional ByVal strdocUref AS String = "",
Optional Byval blnstrdocUref AS Boolean = False) as DataSet
Dim arParms() as SqlParameter = New SqlParameter(15) {}
arParms(0) = new system.Data.SqlClient.sqlParameter("@docDOCTID",
SqlDbType.int)
arParms(0).Value = intdocDOCTID
arParms(1) = new system.Data.SqlClient.sqlParameter("@blndocDOCTID" ,
SqlDbType.bit)
arParms(1).Value = blnintdocDOCTID
arParms(2) = new system.Data.SqlClient.sqlParameter("@docDOSID",
SqlDbType.int)
arParms(2).Value = intdocDOSID
arParms(3) = new system.Data.SqlClient.sqlParameter("@blndocDOSID",
SqlDbType.bit)
arParms(3).Value = blnintdocDOSID
arParms(4) = new system.Data.SqlClient.sqlParameter("@DocNr",
SqlDbType.varchar, 50)
arParms(4).Value = strDocNr
arParms(5) = new system.Data.SqlClient.sqlParameter("@blnDocNr",
SqlDbType.bit)
arParms(5).Value = blnstrDocNr
arParms(6) = new system.Data.SqlClient.sqlParameter("@docTotBedragE xcl",
SqlDbType.float)
arParms(6).Value = dbldocTotBedragExcl
arParms(7) = new system.Data.SqlClient.sqlParameter("@blndocTotBedr agExcl",
SqlDbType.bit)
arParms(7).Value = blndbldocTotBedragExcl
arParms(8) = new system.Data.SqlClient.sqlParameter("@docTotBtw",
SqlDbType.float)
arParms(8).Value = dbldocTotBtw
arParms(9) = new system.Data.SqlClient.sqlParameter("@blndocTotBtw" ,
SqlDbType.bit)
arParms(9).Value = blndbldocTotBtw
arParms(10) = new system.Data.SqlClient.sqlParameter("@docAlgOms",
SqlDbType.varchar, 2000)
arParms(10).Value = strdocAlgOms
arParms(11) = new system.Data.SqlClient.sqlParameter("@blndocAlgOms" ,
SqlDbType.bit)
arParms(11).Value = blnstrdocAlgOms
arParms(12) = new system.Data.SqlClient.sqlParameter("@docOref",
SqlDbType.varchar, 50)
arParms(12).Value = strdocOref
arParms(13) = new system.Data.SqlClient.sqlParameter("@blndocOref",
SqlDbType.bit)
arParms(13).Value = blnstrdocOref
arParms(14) = new system.Data.SqlClient.sqlParameter("@docUref",
SqlDbType.varchar, 50)
arParms(14).Value = strdocUref
arParms(15) = new system.Data.SqlClient.sqlParameter("@blndocUref",
SqlDbType.bit)
arParms(15).Value = blnstrdocUref
Return SqlHelper.ExecuteDataset(gstrCnn, CommandType.StoredProcedure,
"spFilterColltblDocument", arParms)
End Function
"Good Enchiladas" <go************@hotmail.com> wrote in message
news:U0*******************@fe2.columbus.rr.com...
I have an object model that exposes a class inheriting from collection
base.
I would like to make this class available to an ASP.NET data grid, such as
in the following code:
grid.DataSource = MyObjectModel.MyCustomers.Filter("Smith%")
The problem is that MyCustomers is a lazy loading property of
MyObjectModel that, by default, returns ALL customers. So
"MyObjectModel.MyCustomers.Filter("Smith%")" first does the lazy load of
ALL customers THEN loads the customers filtered to the names beginning with
"Smith." The undesired initial lazy load is wasted.
How do I prevent this initial lazy load when a Filter method is called as
in above, but still retain the ability to make the very clean syntax of a
call such as "grid.DataSource = MyObjectModel.MyCustomers" when I want all
customers?