DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Hannes Preishuber Artikel Drucken
        
Drop Down Liste in Gridview und DBNull

Das Einbinden einer Dropdown Liste in ein Gridview Steuerelement zur Auswahl eines Wertes ist leicht zu realsieren. Dies wird auch hier beschrieben.

Problematisch wird es wenn im Feld der Tabelle Werte enthalten sind die nicht in der Liste stehen. Da knn z.B. ein nicht gefülltes Feld sein das dann den Wert DBNull enthält. Es kann dann keine Datenbindung per Bind durchgeführt werden.

SelectedValue='<%# Bind("PostalCode") %>'

Hier ist echtes Coding nötig. Zuerst muss man in das Erstellen der Reihe eingreifen, aber nur wenn sich diese Reihe im Edit Modus befindet. Das Gridview Steuerelement hat dazu das passende RowCreated Event.

Wenn der Feldwert in der Liste vorhanden ist soll auch gleichzeitig dieser selektiert sein .

Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)

If (e.Row.RowState And DataControlRowState.Edit) <> 0 OrElse (e.Row.RowState And DataControlRowState.Insert) <> 0 Then

Try

Dim tmp As DropDownList = CType(e.Row.FindControl("drpPLZ"), DropDownList)

tmp.DataBind()

If Not IsNothing(tmp.Items.FindByValue(DataBinder.Eval(e.Row.DataItem, "postalcode").ToString())) Then

tmp.SelectedValue = DataBinder.Eval(e.Row.DataItem, "postalcode").ToString()

End If

Catch ex As Exception

End Try

End If

End Sub

Wenn die Daten für die Liste aus der Datenbank kommen muss Databind ausgeführt werden. Dies ist bei statisch deklarierten Einträgen nicht nötig.

Der Vollständigkeit halber auch der HTML Teil der ASPX Seite.

<asp:TemplateField HeaderText="PostalCode" SortExpression="PostalCode">

<EditItemTemplate>

<asp:SqlDataSource ID="sqlDSPLZ" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString1 %>"

SelectCommand="SELECT DISTINCT PostalCode FROM Customers ORDER BY PostalCode" CacheDuration="600" EnableCaching=true></asp:SqlDataSource>

<asp:DropDownList ID="drpPLZ" runat="server"

DataSourceID="sqlDSPLZ" DataValueField="postalcode" DataTextField="postalcode" >

</asp:DropDownList>

</EditItemTemplate>

<ItemTemplate>

<asp:Label ID="Label1" runat="server" Text='<%# Bind("PostalCode") %>'></asp:Label>

</ItemTemplate>

</asp:TemplateField>

Um die Liste der Postleitzahlen nur einmal zu laden kann das SQLDatasource Steuerelement ausserhalb des Template Fields platziert werden oder wie in diesem Fall Caching aktiviert werden.

Jetzt fehlt nur noch den Wert auch wieder zu speichern. Dazu muss man die Parameter setzen bevor das Update Statement ausgeführt wird. Das passende Event dazu heisst Rowupdating. Die Parameter Neu sind über NewValues zu erreichen. Dann einfach noch den SelectedVlaue aus der DropDownliste zweisen.

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs)

e.NewValues("postalcode") = CType(GridView1.Rows(e.RowIndex).FindControl("drpPLZ"), DropDownList).SelectedValue

End Sub

So viel Spass damit.

 

 

 


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 02.02.2006
  Gültig bis: 03.05.2006
6 Ratings
Bewertung: 96,7%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG