DropDown Listen befüllen
Geschrieben von: Christian Holm Dieser Artikel beschreibt zwei unterschiedliche Methoden wie man die DropDownList WebControl mit Daten befüllen kann. Zuerst mit Hilfe der ArrayList, und danach wie man die Listeneinträge aus einer SQL-Datenbank bezieht. Ich möchte darauf hinweisen, daß wenn Sie den Beispiel-Sourccode selbst ausprobieren möchten, Sie einen Microsoft SQL Server 7.0 oder höher mit der Zugangsberechtigung user id=sa; pwd=; benötigen. Als Beispieldatenbank habe ich die Northwind Datenbank herangezogen. Diese ist standardmäßig bei den Beispieldateien des SQL Servers enthalten. Weiters ist zu beachten, daß wie immer bei unseren ASP.NET Artikeln, Sie nur dann vom downloadbaren Sourcecode profitieren können, wenn Sie das Microsoft .NET Framework SDK auf einem Webserver installiert haben. Damit werden auf diesem Webserver ASP.NET Seiten ( .aspx ) ausführbar. ArrayListIm einfachsten Fall kann man die Listeneinträge innerhalb des <script>-Blockes mit Hilfe der ArrayList Klasse erstellen. Dabei werden die Einträge durch die von der ArrayList Klasse unterstützte Add Methode hinzugefügt. Das folgende Beispiel zeigt die sourcecodemäßige Ausführung. Sie finden diese Datei im Download unter DropDownSimple.aspx: ... void Page_Load(Object Sender, EventArgs E) { if (!IsPostBack) { ArrayList Days = new ArrayList(); Days.Add ("Montag"); Days.Add ("Dienstag"); Days.Add ("Mittwoch"); Days.Add ("Donnerstag"); Days.Add ("Freitag"); Days.Add ("Samstag"); Days.Add ("Sonntag"); MyDropDown.DataSource = Days; MyDropDown.DataBind(); } } ... Zuerst wird ein neues ArrayList Objekt erstellt. Danach werden die einzelnen Einträge mit der Add Methode der Klasse dem Objekt hinzugefügt. Um die Einträge des ArrayList Objekts der ASP.NET Control hinzuzufügen, geben wir zuerst der DropDownList Control die Datenquelle mittels der DataSource Property bekannt. Die Datenquelle ist ja in diesem Fall die ArrayList. Durch die DataBind Methode werden dann die Einträge der Control zugewiesen. Um dann die Benutzerauswahl erfassen zu können gibt es die Möglichkeit dies entweder über die AutoPostBack Property der WebControl zu tun oder durch einen Event (z.B Button_Click) einen PostBack zu erzwingen. In diesm Beispiel habe ich mich für letzters entschieden; D. h. man muß im script-Block eine _Click Methode erstellen um den PostBack-Event triggern zu können: ... void btnSubmit_Click(Object sender, EventArgs e) { lblMsg1.Text = "Ihre Auswahl: " + MyDropDown.SelectedItem.Text; } ... Diese Methode übergibt als Ergebnis nach dem PostBack die Auswahl des Benutzers an eine Label Control. Zusätzlich um diesen Event starten zu können muß man wie gewohnt innerhalb der form Tags eine Button Control einbauen: ... <asp:button Text="Abschicken" OnClick="btnSubmit_Click" runat="server" /> ... Das war ja ganz einfach. Was aber wenn man die Daten allgemein aus einer Datenbank bekommen möchte? Anwendungsbeispiele wären z.B. ein Web Shop mit einer Produkt Datenbank. Bei einer großen Anzahl von Listeneinträgen wird die ArrayList Methode schnell unhandlich, und außerdem ist es irgendwie unflexibel. SQL-DB und DataBindDurch eine Anbindung an die Datenbank kann man z.B. die Listeneinträge leichter sortieren, ein weiteres Processing wird durch die Verwendung der Primärschlüssel um einiges einfacher und man kann den erstellten Sourcecode leichter wiederverwerten. Dabei muß man lediglich den Connection String und das SQL-Statement ändern. In diesem Beispiel verwende ich der Einfachheit halber die Northwind Datenbank. Der Benutzer kann bei Verwendung der im Beispiel angegebenen Randbedingungen (Connection String, SQL-Statement) in der DropDownList aus den in der Datenbank angegebenen Lieferanten auswählen. Je nach der getroffenen Auswahl des Eintrags wird dann ein Index der Label Control zugewiesen. Gehen wir aber den Sourcecode einzeln durch (DropDownSql.aspx): ... // Namespace Referenzen, etc. void Page_Load(Object Src, EventArgs E) { if (Page.IsPostBack) { lblMsg1.Text = MyDropDown.SelectedIndex.ToString(); } else { BindData(); } } ... Um Serverresourcen zu sparen verwenden wir die Page.IsPostBack Property um festzustellen, ob die Seite schon einmal geladen wurde. Ist dies nicht der Fall so rufen wir die BindData Methode auf, die wie folgt aussieht: ... void BindData() { // DataSet Deklaration //Angabe des Conn Strings, SQL Statements, etc. SqlConnection MyNWConn = new SqlConnection(strConn); DataSet MyDataSet = new DataSet(); SqlDataAdapter oCommand = new SqlDataAdapter(strSQL,MyNWConn); oCommand.Fill(MyDataSet, "MyData"); MyDropDown.DataSource = MyDataSet.Tables["MyData"].DefaultView; MyDropDown.DataTextField = "CompanyName"; MyDropDown.DataValueField = "SupplierID"; MyDropDown.DataBind(); } } ... Mit der DataSource Property geben Sie die Datenquelle für die DropDownList Control an. Mit DataTextField bestimmen Sie das Feld der Tabelle, das den Text der Einträge in der DropDownList enthält. DataValueField definiert das Tabellenfeld für den Wert, der beim Abfragen des selektierten Eintrags geliefert werden soll (meist der Primärschlüssel der Tabelle). Databind weist dann endgültig die Einträge der Web Control zu. Bei der Angabe des DropDownList Tags innerhalb des Form Tags müssen Sie die AutoPostBack Property auf "True" setzen um den Postback zu triggern. Und schon können Sie die Selektion der datenbankgefüllten DropDown List auswerten. SchlußbemerkungDieser Artikel hat Ihnen die Möglichkeiten der Eintrag-Generierung einer DropDownList Control nähergebracht. Sie können jetzt je nach Anforderung entweder die Listeneinträge über die ArrayList Klasse erstellen oder die Einträge mit Hilfe einer Datenbank generieren. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Einführung in ASP.NET Web Forms Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |