Πολύ συχνα χρειαζόμαστε ένα web control με συγκεκριμές ιδιότητες ή λειτουργίες σε πολλές web forms ή και σε πολλά projects. Για παράδειγμα έχουμε ένα dropdownlist το οποίο διαβάζει τα δεδομένα από τη βάση. Θέλουμε να υπάρχει μια πρώτη επιλογή του τύπου please select με τιμή 0.
η πρώτη δυνατότητα είναι σε κάθε σελίδα να προσθέτουμε το item αυτό αφού κάνουμε το databound π.χ
Sub Page_Load(sender as Object, e as EventArgs)
If (Not Page.IsPostBack) then
.......
myDropDown.datasource = dbSource
myDropDown.databound
myDropDown.items.insert(0,new listItem("please select",0))
....
end if
end sub
και στη σελίδα μας απλά να έχουμε to dropdown
<form runat="server">
<asp:dropdownlist id="myDropDown" runat="server" DataTextField="....." DataValueField="....." />
</form>
η δεύτερη δυνατότητα είναι να φτιάξουμε ένα δικό μας dropdownlist control το οποίο θα κληρονομεί όλα τα properties,methods,events του dropdownlist αλλά θα προσθέτει το item μόνο του αφού γίνει το databind. Θα έχει δηλαδή το δικό του DataBound event handler
στο αρχείο λοιπόν /app_code/mycontrols.vb δηλώνουμε την κλάση μας
Imports Microsoft.VisualBasic
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.ComponentModel
Namespace myControls
Public Class selectDropDown
Inherits DropDownList
Public Sub addSelect(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.DataBound
If Me.Items.Count > 0 Then
Me.Items.Insert(0, New ListItem("select", 0))
Me.Enabled = True
Else
Me.Items.Insert(0, New ListItem("no items", 0))
Me.Enabled = False
End If
End Sub
End Class
end Namespace
στο web.config δηλώνουμε που βρίσκεται το namespace: (το γεγονός ότι βάλαμε την κλάση μας στο /app_code μας γλιτώνει από πολλούς μπελάδες)
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<pages >
<controls>
<add tagPrefix="custom" namespace="myControls" />
</controls>
</pages>
</system.web>
</configuration>
και στη σελίδα μας απλά προσθέτουμε το control μας:
<form runat="server>
<custom:selectDropDown ID="myDropDown" DataSourceID="..." DataTextField="..." DataValueField="..." runat="server" />
</form>