Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

DropDown Listen befüllen

Geschrieben von: Christian Holm
Kategorie: ADO.NET

This printed page brought to you by AlphaSierraPapa

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.

ArrayList

Im 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 DataBind

Durch 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ßbemerkung

Dieser 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.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20001123.zip

Verwandte Artikel

Einführung in ASP.NET Web Forms
http:/www.aspheute.com/artikel/20000808.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.