Veritabanı ile CascadingDropDown Kullanma (VB)
Christian Wenz tarafından
AJAX Denetim Araç Seti'ndeki CascadingDropDown denetimi, DropDownList denetimini genişleterek bir DropDownList'teki değişikliklerin ilişkili değerleri başka bir DropDownList'e yüklemesini sağlar. Bunun çalışması için özel bir web hizmeti oluşturulmalıdır.
Genel Bakış
AJAX Denetim Araç Seti'ndeki CascadingDropDown denetimi, DropDownList denetimini genişleterek bir DropDownList'teki değişikliklerin ilişkili değerleri başka bir DropDownList'e yüklemesini sağlar. (Örneğin, bir liste ABD eyaletlerinin listesini sağlar ve bir sonraki liste de bu eyaletteki büyük şehirlerle doldurulur.) Bunun çalışması için özel bir web hizmeti oluşturulmalıdır.
Adımlar
Her şeyden önce, bir veri kaynağı gereklidir. Bu örnekte AdventureWorks veritabanı ve Microsoft SQL Server 2005 Express Sürüm kullanılır. Veritabanı, Visual Studio yüklemesinin isteğe bağlı bir parçasıdır (express edition dahil) ve altında https://go.microsoft.com/fwlink/?LinkId=64064ayrı bir indirme olarak da kullanılabilir. AdventureWorks veritabanı, SQL Server 2005 Örnekleri ve Örnek Veritabanlarının bir parçasıdır (adresinden https://www.microsoft.com/download/details.aspx?id=10679indirin). Veritabanını ayarlamanın en kolay yolu Microsoft SQL Server Management Studio (/sql/ssms/download-sql-server-management-studio-ssms) kullanmak ve veritabanı dosyasını eklemektirAdventureWorks.mdf
.
Bu örnek için, SQL Server 2005 Express Sürüm örneğinin çağrıldığını SQLEXPRESS
ve web sunucusuyla aynı makinede bulunduğunu varsayarız; bu aynı zamanda varsayılan kurulumdur. Kurulumunuz farklıysa, veritabanı için bağlantı bilgilerini uyarlamanız gerekir.
ASP.NET AJAX ve Denetim Araç Seti'nin işlevselliğini etkinleştirmek için, ScriptManager
denetim sayfanın herhangi bir yerine (ancak öğesi içinde <form
> ) yerleştirilmelidir:
<asp:ScriptManager ID="asm" runat="server" />
Sonraki adımda iki DropDownList denetimi gerekir. Bu örnekte AdventureWorks'teki satıcı ve iletişim bilgilerini kullanırız, bu nedenle kullanılabilir satıcılar için bir liste ve kullanılabilir kişiler için bir liste oluştururuz:
<div>
Vendor: <asp:DropDownList ID="VendorsList" runat="server"/><br />
Contacts: <asp:DropDownList ID="ContactsList" runat="server"/><br />
</div>
Ardından, sayfaya iki CascadingDropDown genişletici eklenmelidir. Biri ilk (satıcılar) listesini, diğeri de ikinci (kişiler) listesini doldurur. Aşağıdaki öznitelikler ayarlanmalıdır:
ServicePath
: Liste girdilerini teslim eden bir web hizmetinin URL'siServiceMethod
: Liste girdilerini teslim eden web yöntemiTargetControlID
: Açılan listenin kimliğiCategory
: Çağrıldığında web yöntemine gönderilen kategori bilgileriPromptText
: Liste verileri sunucudan zaman uyumsuz olarak yüklenirken görüntülenen metinParentControlID
: (isteğe bağlı) geçerli listenin yüklenmesini tetikleyen üst açılan liste
Kullanılan programlama diline bağlı olarak, söz konusu web hizmetinin adı değişir, ancak diğer tüm öznitelik değerleri aynıdır. İlk açılan listenin CascadingDropDown öğesi aşağıdadır:
<ajaxToolkit:CascadingDropDown ID="ccd1" runat="server"
ServicePath="CascadingDropdown1.vb.asmx" ServiceMethod="GetVendors"
TargetControlID="VendorsList" Category="Vendor"
PromptText="Select Vendor" />
İkinci listenin denetim genişleticilerinin özniteliğini ParentControlID
ayarlaması gerekir; böylece satıcı listesinden bir giriş seçildiğinde kişi listesindeki ilişkili öğelerin yüklenmesi tetiklenebilir.
<ajaxToolkit:CascadingDropDown ID="ccd2" runat="server"
ServicePath="CascadingDropdown1.vb.asmx" ServiceMethod="GetContactsForVendor"
TargetControlID="ContactsList" ParentControlID="VendorsList"
Category="Contact"
PromptText="Select Contact" />
Gerçek iş daha sonra web hizmetinde yapılır ve bu işlem aşağıdaki gibi ayarlanır. Özniteliğin [ScriptService]
kullanıldığını, aksi takdirde ASP.NET AJAX'ın istemci tarafı betik kodundan web yöntemlerine erişmek için JavaScript proxy'sini oluşturamadığını unutmayın.
<%@ WebService Language="VB" Class="CascadingDropdown1" %>
Imports System.Web.Script.Services
Imports AjaxControlToolkit
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Collections.Generic
Imports System.Collections.Specialized
Imports System.Data.SqlClient
<ScriptService()> _
Public Class CascadingDropdown1
Inherits System.Web.Services.WebService
' ...
End Class
CascadingDropDown tarafından çağrılan web yöntemlerinin imzası aşağıdaki gibidir:
Public Function MethodNameHere(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
Bu nedenle dönüş değeri, Denetim Araç Seti tarafından tanımlanan türde CascadingDropDownNameValue
bir dizi olmalıdır. Yöntemin GetVendors()
uygulanması oldukça kolaydır: Kod AdventureWorks veritabanına bağlanır ve ilk 25 satıcıyı sorgular. Oluşturucudaki CascadingDropDownNameValue
ilk parametre, liste girdisinin başlık, ikincisi değeridir (HTML'nin <option
> öğesindeki değer özniteliği). Kod aşağıdaki gibidir:
<WebMethod()> _
Public Function GetVendors(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
Dim conn As New SqlConnection("server=(local)\SQLEXPRESS; Integrated Security=true; Initial Catalog=AdventureWorks")
conn.Open()
Dim comm As New SqlCommand( _
"SELECT TOP 25 VendorID, Name FROM Purchasing.Vendor", conn)
Dim dr As SqlDataReader = comm.ExecuteReader()
Dim l As New List(Of CascadingDropDownNameValue)
While (dr.Read())
l.Add(New CascadingDropDownNameValue(dr("Name").ToString(),dr("VendorID").ToString()))
End While
conn.Close()
Return l.ToArray()
End Function
Bir satıcı için ilişkili kişileri almak (yöntem adı: GetContactsForVendor()
) biraz daha karmaşıktır. Her şeyden önce, ilk açılan listede seçilen satıcı belirlenmelidir. Denetim Araç Seti bu görev için bir yardımcı yöntem tanımlar: ParseKnownCategoryValuesString()
yöntemi, açılan verileri içeren bir StringDictionary
öğe döndürür:
<WebMethod()> _
Public Function GetContactsForVendor(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
Dim VendorID As Integer
CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
Güvenlik nedeniyle önce bu verilerin doğrulanması gerekir. Dolayısıyla bir Satıcı girişi varsa ( Category
ilk CascadingDropDown öğesinin özelliği olarak ayarlandığından "Vendor"
), seçili satıcının kimliği alınabilir:
If Not kv.ContainsKey("Vendor") Or Not Int32.TryParse(kv("Vendor"),VendorID) Then
Throw New ArgumentException("Couldn't find vendor.")
End If
Yöntemin geri kalanı oldukça düzdür, o zaman. Satıcının kimliği, ilgili satıcıyla ilişkili tüm ilgili kişileri alan bir SQL sorgusu için parametre olarak kullanılır. Yöntemi bir kez daha türünde CascadingDropDownNameValue
bir dizi döndürür.
Dim conn As New SqlConnection("server=(local)\SQLEXPRESS; Integrated Security=true; Initial Catalog=AdventureWorks")
conn.Open()
Dim comm As New SqlCommand("SELECT Person.Contact.ContactID, FirstName, LastName FROM Person.Contact,Purchasing.VendorContact WHERE VendorID=@VendorID AND Person.Contact.ContactID=Purchasing.VendorContact.ContactID",conn)
comm.Parameters.AddWithValue("@VendorID", VendorID)
Dim dr As SqlDataReader = comm.ExecuteReader()
Dim l As New List(Of CascadingDropDownNameValue)
While (dr.Read())
l.Add(New CascadingDropDownNameValue(dr("FirstName").ToString() & " " & dr("LastName").ToString(),dr("ContactID").ToString()))
End While
conn.Close()
Return l.ToArray()
End Function
ASP.NET sayfasını yükleyin ve kısa bir süre sonra satıcı listesi 25 girişle doldurulur. Bir giriş seçin ve ikinci açılan listenin verilerle nasıl doldurulduğuna dikkat edin.
İlk liste otomatik olarak doldurulur (Tam boyutlu görüntüyü görüntülemek için tıklayın)
İkinci liste, ilk listedeki seçime göre doldurulur (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin