ASP.NET 2003: Filtern einer ObjectDataSource

02/06/2009 - 18:43 von Liz Helmecke | Report spam
Hallo NG,

nach Stunden des Googelns bin ich ein paar Millimeter weiter, aber das war's
dann auch schon...

ASP.NET mit VB.NET in Visual Studio 2003:

ich habe folgendes Szenario und Ziel:
- eine asp:Textbox, in die der User ein Suchwort eingeben kann
- und eine asp:DropDownList, die sich aufgrund des Suchwortes filtern soll,
und zwar nicht à la "Buchtitel = 'Vom Winde verweht'", sondern "Buchtitel
LIKE 'Winde'".

Die DropDownList wird gefüllt von einer ObjectDataSource.
Diese wird gefüllt durch eine Methode, die ein DataTable zurückgibt.

Also:
Beim Ereignis TextChanged der Textbox -> wenn Eingabe lànger als 5 Zeichen,
dann soll DropDownList gefiltert werden.
Bzw. nicht die DropDownList muss gefiltert werden, sondern die
ObjectDataSource, richtig?

Ich habs jetzt auf zig Arten probiert, z.B.:
myObjectDataSource.FilterExpression = "Buchtitel LIKE 'Winde'".
oder über eine geànderte SelectMethod, Aufruf von .Select().
usw.usf.

Es klappt kein bisschen. Immer kommt der selbe Fehler:
in der HTML-Ansicht bleibt es stecken beim DropDownList, und die Meldung
heißt "Datenbindungsmethoden wir Eval(), XPath() und Bind() können nur im
Kontext eines datengebundenen Steuerelementes verwendet werden."

also liefert offensichtlich die ObjectDataSource nach meinen Filterversuchen
keine DataTable mehr zurück.
Aber wieso nicht? Weil sie offensichtlich verkehrt sind.

Aber wie geht es richtig?
DANKE!
Liz
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
02/06/2009 - 22:56 | Warnen spam
Hallo Liz,

"Liz Helmecke" schrieb:

nach Stunden des Googelns bin ich ein paar Millimeter weiter, aber das war's dann auch schon...



das mag an den Suchbegriffen liegen. Denn ehrlich gesagt hab ich nicht
wirklich viel von dem verstanden, was Du da geschrieben hast. Wàrs
machbar, das nochmal in einer Form zu posten, die nachvollziehbar
aufzeigt, was Du da wo tust und vor allem, mit welchem Code?

ASP.NET mit VB.NET in Visual Studio 2003:



ASP.NET 1.1 ist aber auch nicht mehr so aktuell. Ggfs. würde es dir schon
helfen, wenn Du auf VS 2008 (oder VS 2010, das ja dann auch irgendwann
"demnàchst" mal rauskommen wird) wechselst. Derzeit ist VS 2010 aber noch
in der Betaphase.

ich habe folgendes Szenario und Ziel:
- eine asp:Textbox, in die der User ein Suchwort eingeben kann
- und eine asp:DropDownList, die sich aufgrund des Suchwortes filtern soll, und zwar nicht à la "Buchtitel = 'Vom Winde verweht'",
sondern "Buchtitel LIKE 'Winde'".



1.) Wenn schon, dann "WHERE Buchtitel LIKE '%Winde%'" (wenn die Filterung
per SQL passiert) bzw. "WHERE Buchtitel LIKE '*Winde*'" bei Filterung über
eine DataView.

2.) Was meinst Du mit "und zwar nicht à la "Buchtitel = 'Vom Winde verweht'",
sondern "Buchtitel LIKE 'Winde'"."?

Die DropDownList wird gefüllt von einer ObjectDataSource.



Bist Du dir _ganz_ sicher, dass Du VS 2003 (ASP.NET 1.1) verwendest?

Siehe: http://msdn.microsoft.com/de-de/lib...datasource(VS.80).aspx
| Hinweis: Diese Klasse ist neu in .NET Framework, Version 2.0.

Also doch eher VS 2005 oder 2008?

Diese wird gefüllt durch eine Methode, die ein DataTable zurückgibt.



Du bindest aber die ObjectDataSource, oder?

Beim Ereignis TextChanged der Textbox -> wenn Eingabe lànger als 5 Zeichen, dann soll DropDownList gefiltert werden.



Und wie machst Du das?

Bzw. nicht die DropDownList muss gefiltert werden, sondern die ObjectDataSource, richtig?



Ja. Danach solltest Du die ObjectDataSource wieder als DataSource an das
DDL Control zuweisen und per <DDL>.DataBind() die Daten binden.

Ich habs jetzt auf zig Arten probiert, z.B.:
myObjectDataSource.FilterExpression = "Buchtitel LIKE 'Winde'".
oder über eine geànderte SelectMethod, Aufruf von .Select().
usw.usf.



?????? (Sorry, mit weniger Fragezeichen gings echt nicht)

Es klappt kein bisschen. Immer kommt der selbe Fehler:
in der HTML-Ansicht bleibt es stecken



?

beim DropDownList, und die Meldung heißt "Datenbindungsmethoden wir Eval(), XPath() und Bind() können nur im Kontext eines
datengebundenen Steuerelementes verwendet werden."



Was hast Du wo wie gemacht und welchen Code verwendest Du dafür?

also liefert offensichtlich die ObjectDataSource nach meinen Filterversuchen keine DataTable mehr zurück.



Soll sie ja auch gar nicht!? Dein Control wird lt. dem Text weiter oben
durch eine DataTable, die von einer Methode zurückgegeben wird, gefüllt.

Aber wieso nicht? Weil sie offensichtlich verkehrt sind.



Scheint so.

Aber wie geht es richtig?



Keine Ahnung. Aber wenn Du das ganze mal in eine Form bringst, die es
einem Außenstehenden ermöglicht, zu verstehen, was Du da eigentlich wie
machst, kann ich es gerne nochmal versuchen :)

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen