Forums Neueste Beiträge
 

Combobox füllen

06/04/2009 - 19:36 von Martin Wendel | Report spam
Hidiho,

man will es nicht glauben aber ich schaffe es nicht eine dumme Combobox zu
füllen
mit einer auf einem SQL Server liegenden Stored Procedure.

Mein Kollege hat das in der Arbeit unter einer Webapplikation so gelöst (nd
es funktioniert)

DB.OpenDB()
Dim DBcmd As SqlCommand = New SqlCommand()
DBcmd.CommandType = Data.CommandType.StoredProcedure
DBcmd.CommandText = "GetABTEILUNGEN"
Dim rdr As SqlDataReader = DB.GetData(DBcmd)
ddl.DataSource = rdr
'Anzeigespalte festlegen
ddl.DataTextField = "Abteilung"
'Wertspalte festlegen
ddl.DataValueField = "idAbteilung"
'Daten binden
ddl.DataBind()
rdr.Close()
DB.CloseDB()


ddl = combobox, keine ahnung warum er die so genannt hat.
komisch dabei ist, weil vielleicht normal bei einer Windowsapplikation die
ich mache
ddl.Datasource = rdr geht bei mir gar nicht
Fehlermeldung: Das komplexe DataBinding akzeptiert als Datenquelle
entweder IList oder IListSource.
?? was will der ??
ddl.databind gibts es auch nicht.

Das habe ich in meiner Windowsappliaktion:
Public g_db As New Datenbank("SEW-HomePC", "DB_Handy", True)

g_db.OpenDB()
Dim DBcmd As SqlCommand = New SqlCommand()
DBcmd.CommandType = Data.CommandType.StoredProcedure
DBcmd.CommandText = "dbo.SP_Handy_All_Hersteller"

Dim rdr As SqlDataReader = g_db.GetData(DBcmd)
cbo_Hersteller.DataSource = rdr

'Anzeigespalte festlegen
cbo_Hersteller.DisplayMember = "Firmenname"
'Wertspalte festlegen
cbo_Hersteller.ValueMember = "HID"
rdr.Close()
g_db.CloseDB()

wie schon geschrieben, der will was von einem ILIst haben.

Kann sich irgendjemand erbarmen und ein Beispiel aufzeigen?
mit Stored Prozedure.

Was ich mich frage ist warum das immer komplizierter wird, das war doch in
VB6 noch einfacher, da hat man die Hilfe geöffnet und da stand ein Beispiel,
jetzt öffnet man die Hilfe und da steht nur was von Ereignissen und
Schnittstellen aber kein wirkliches Beispiel, obwohl ja alles vom selben
Hersteller kommt.




thx
Martin Wendel
 

Lesen sie die antworten

#1 Peter Fleischer
07/04/2009 - 05:00 | Warnen spam
"Martin Wendel" schrieb im
Newsbeitrag news:

man will es nicht glauben aber ich schaffe es nicht eine dumme Combobox zu
füllen
mit einer auf einem SQL Server liegenden Stored Procedure.

Mein Kollege hat das in der Arbeit unter einer Webapplikation so gelöst
(nd
es funktioniert)

DB.OpenDB()
Dim DBcmd As SqlCommand = New SqlCommand()
DBcmd.CommandType = Data.CommandType.StoredProcedure
DBcmd.CommandText = "GetABTEILUNGEN"
Dim rdr As SqlDataReader = DB.GetData(DBcmd)
ddl.DataSource = rdr
'Anzeigespalte festlegen
ddl.DataTextField = "Abteilung"
'Wertspalte festlegen
ddl.DataValueField = "idAbteilung"
'Daten binden
ddl.DataBind()
rdr.Close()
DB.CloseDB()



Hi Martin,
der Code sieht aus wie VB.NET-Code und nicht wie klassicher VB-Code (Thema
dieser Newsgroup).

ddl = combobox, keine ahnung warum er die so genannt hat.
komisch dabei ist, weil vielleicht normal bei einer Windowsapplikation die
ich mache
ddl.Datasource = rdr geht bei mir gar nicht
Fehlermeldung: Das komplexe DataBinding akzeptiert als Datenquelle
entweder IList oder IListSource.



Die Windows-ComboBox will ein Objekt vom Typ einer Klasse, die eines der
Interfaces IList oder IListSource implementiert. Ein DataReader
implementiert das nicht. Er kann nur vorwàrts lesen, was bei einer
Web-ComboBox ausreicht, da dort nur die Daten in html-Text überführt werden
und den Rest der Browser unabhàngig von der Anwendung macht.

?? was will der ??



Er will einen Datenpuffer, der IList oder IListSource implementiert, damit
der Anwender in der Datenmenge navigieren kann.

ddl.databind gibts es auch nicht.



Die Windows-ComboBox nutz eine komplexe Datenbindung. DataBind ist eine
Methode der WebPage-Klasse, um die Daten sequentiell für das Rendering
bereitzustellen.

Das habe ich in meiner Windowsappliaktion:
Public g_db As New Datenbank("SEW-HomePC", "DB_Handy", True)

g_db.OpenDB()
Dim DBcmd As SqlCommand = New SqlCommand()
DBcmd.CommandType = Data.CommandType.StoredProcedure
DBcmd.CommandText = "dbo.SP_Handy_All_Hersteller"

Dim rdr As SqlDataReader = g_db.GetData(DBcmd)
cbo_Hersteller.DataSource = rdr



Hier solltest du eine DataTable als Datenpuffer und einen DataAdapter zum
Füllen der DataTable nutzen, z.B. so (ungetestet)

DBcmd.Connection = g_db
Dim da As New SqlDataAdapter(DBcmd)
Dim dt As New DataTable
da.Fill(dt)
cbo_Hersteller.DataSource = dt

'Anzeigespalte festlegen
cbo_Hersteller.DisplayMember = "Firmenname"
'Wertspalte festlegen
cbo_Hersteller.ValueMember = "HID"
rdr.Close()
g_db.CloseDB()

wie schon geschrieben, der will was von einem ILIst haben.

Kann sich irgendjemand erbarmen und ein Beispiel aufzeigen?
mit Stored Prozedure.

Was ich mich frage ist warum das immer komplizierter wird, das war doch in
VB6 noch einfacher, da hat man die Hilfe geöffnet und da stand ein
Beispiel,
jetzt öffnet man die Hilfe und da steht nur was von Ereignissen und
Schnittstellen aber kein wirkliches Beispiel, obwohl ja alles vom selben
Hersteller kommt.



In der Hilfe stehen sehr viele Beispiele, mehr als in der VB6-Hilfe Das
Problem ist nur, dass man ein paar Grundkenntnisse haben muss, um wenigstens
die gewünschte Methode auswàhlen zu können, wo dann Beispielcode steht.

Viele Grüsse
Peter

Ähnliche fragen