Veritabanı ile CascadingDropDown Kullanma (VB)Using CascadingDropDown with a Database (VB)

Hristia WENZ tarafındanby Christian Wenz

Kodu indirin veya PDF 'yi indirinDownload Code or Download PDF

AJAX denetim araç setinde basamaklı Dingdropdown denetimi bir DropDownList denetimini genişleterek bir DropDownList içindeki değişikliklerin başka bir DropDownList içindeki ilişkili değerleri yükler.The CascadingDropDown control in the AJAX Control Toolkit extends a DropDownList control so that changes in one DropDownList loads associated values in another DropDownList. Bunun çalışması için özel bir Web hizmetinin oluşturulması gerekir.In order for this to work, a special web service must be created.

Genel bakışOverview

AJAX denetim araç setinde basamaklı Dingdropdown denetimi bir DropDownList denetimini genişleterek bir DropDownList içindeki değişikliklerin başka bir DropDownList içindeki ilişkili değerleri yükler.The CascadingDropDown control in the AJAX Control Toolkit extends a DropDownList control so that changes in one DropDownList loads associated values in another DropDownList. (Örneğin, bir liste ABD durumlarının listesini sağlar ve sonraki liste o durumda büyük şehirlerle doldurulur.) Bunun çalışması için özel bir Web hizmetinin oluşturulması gerekir.(For instance, one list provides a list of US states, and the next list is then filled with major cities in that state.) In order for this to work, a special web service must be created.

AdımlarSteps

Birincisi, bir veri kaynağı gereklidir.First of all, a data source is required. Bu örnek, AdventureWorks veritabanını ve Microsoft SQL Server 2005 Express sürümünü kullanır.This sample uses the AdventureWorks database and the Microsoft SQL Server 2005 Express Edition. Veritabanı, Visual Studio yüklemesinin (Express Edition dahil) isteğe bağlı bir parçasıdır ve https://go.microsoft.com/fwlink/?LinkId=64064altında ayrı bir indirme olarak da kullanılabilir.The database is an optional part of a Visual Studio installation (including express edition) and is also available as a separate download under https://go.microsoft.com/fwlink/?LinkId=64064. AdventureWorks veritabanı SQL Server 2005 örnek ve örnek veritabanlarının bir parçasıdır ( https://www.microsoft.com/downloads/details.aspx?FamilyID=e719ecf7-9f46-4312-af89-6ad8702e4e6e&D ısplaylang = en).The AdventureWorks database is part of the SQL Server 2005 Samples and Sample Databases (download at https://www.microsoft.com/downloads/details.aspx?FamilyID=e719ecf7-9f46-4312-af89-6ad8702e4e6e&DisplayLang=en). Veritabanını ayarlamanın en kolay yolu, Microsoft SQL Server Management Studio Express (https://www.microsoft.com/downloads/details.aspx?FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796&D isplayLang = en) kullanmaktır ve AdventureWorks.mdf veritabanı dosyasını eklemektir.The easiest way to set the database up is to use the Microsoft SQL Server Management Studio Express (https://www.microsoft.com/downloads/details.aspx?FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796&DisplayLang=en) and attach the AdventureWorks.mdf database file.

Bu örnek için, SQL Server 2005 Express Sürüm örneğinin SQLEXPRESS ve Web sunucusuyla aynı makinede yer aldığı varsayılmaktadır; Bu, aynı zamanda varsayılan kurulumdır.For this sample, we assume that the instance of the SQL Server 2005 Express Edition is called SQLEXPRESS and resides on the same machine as the web server; this is also the default setup. Kurulumlarınız farklıysa, veritabanının bağlantı bilgilerini uyarlamanız gerekir.If your setup differs, you have to adapt the connection information for the database.

ASP.NET AJAX ve Denetim araç seti işlevlerini etkinleştirmek için, ScriptManager denetimi sayfada herhangi bir yere yerleştirmeli (ancak <form> öğesi içinde):In order to activate the functionality of ASP.NET AJAX and the Control Toolkit, the ScriptManager control must be put anywhere on the page (but within the <form> element):

<asp:ScriptManager ID="asm" runat="server" />

Sonraki adımda iki DropDownList denetimi gereklidir.In the next step, two DropDownList controls are required. Bu örnekte, AdventureWorks 'ten satıcıyı ve iletişim bilgilerini kullanıyoruz, bu nedenle kullanılabilir satıcılar için bir liste ve kullanılabilir kişiler için bir liste oluşturacağız:In this sample, we use the vendor and contact information from AdventureWorks, thus we create one list for the available vendors and one for the available contacts:

<div>
 Vendor: <asp:DropDownList ID="VendorsList" runat="server"/><br />
 Contacts: <asp:DropDownList ID="ContactsList" runat="server"/><br />
</div>

Daha sonra, sayfaya iki basamaklı Dingı açılan genişleticinin eklenmesi gerekir.Then, two CascadingDropDown extenders must be added to the page. Birincisi (satıcılar) listesini doldurur ve diğeri ikinci (kişiler) listesini doldurur.One fills the first (vendors) list, and the other one fills the second (contacts) list. Aşağıdaki özniteliklerin ayarlanması gerekir:The following attributes must be set:

  • ServicePath: liste girdilerini sunan bir Web hizmetinin URL 'SIServicePath: URL of a web service delivering the list entries
  • ServiceMethod: liste girdilerini teslim eden Web yöntemiServiceMethod: Web method delivering the list entries
  • TargetControlID: açılan listenin KIMLIĞITargetControlID: ID of the dropdown list
  • Category: çağrıldığında Web yöntemine gönderilen kategori bilgileriCategory: Category information that is submitted to the web method when called
  • PromptText: sunucudan zaman uyumsuz olarak liste verileri yüklenirken görünen metinPromptText: Text displayed when asynchronously loading list data from the server
  • ParentControlID: (isteğe bağlı) geçerli listenin yüklenmesini tetikleyen üst açılan listeParentControlID: (optional) parent dropdown list that triggers loading of the current list

Kullanılan programlama diline bağlı olarak, söz konusu Web hizmeti 'nin adı değişir ancak diğer tüm öznitelik değerleri aynıdır.Depending on the programming language used, the name of the web service in question changes, but all other attribute values are the same. İlk açılan liste için Basamakarda açılan öğe aşağıda verilmiştir:Here is the CascadingDropDown element for the first dropdown list:

<ajaxToolkit:CascadingDropDown ID="ccd1" runat="server"
 ServicePath="CascadingDropdown1.vb.asmx" ServiceMethod="GetVendors"
 TargetControlID="VendorsList" Category="Vendor"
 PromptText="Select Vendor" />

İkinci liste için denetim genişleticilerinin ParentControlID özniteliği ayarlaması gerekir, böylece satıcılar listesinde bir girişi seçmek, kişiler listesinde ilişkili öğeleri yüklemeyi tetikler.The control extenders for the second list need to set the ParentControlID attribute so that selecting an entry in the vendors list triggers loading associated elements in the contacts list.

<ajaxToolkit:CascadingDropDown ID="ccd2" runat="server"
 ServicePath="CascadingDropdown1.vb.asmx" ServiceMethod="GetContactsForVendor"
 TargetControlID="ContactsList" ParentControlID="VendorsList"
 Category="Contact"
 PromptText="Select Contact" />

Fiili çalışma daha sonra Web hizmetinde yapılır, bu da aşağıdaki şekilde ayarlanmıştır.The actual work is then done in the web service, which is set up as follows. [ScriptService] özniteliğinin kullanıldığını unutmayın, aksi takdirde ASP.NET AJAX, istemci tarafı betik kodundan Web yöntemlerine erişmek için JavaScript proxy 'sini oluşturamaz.Note that the [ScriptService] attribute is used, otherwise ASP.NET AJAX cannot create the JavaScript proxy to access the web methods from client-side script code.

<%@ 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

Basamaklı Dingdropdown tarafından çağrılan Web yöntemlerinin imzası aşağıdaki gibidir:The signature of the web methods called by CascadingDropDown is as follows:

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 CascadingDropDownNameValue türünde bir dizi olmalıdır.So the return value must be an array of type CascadingDropDownNameValue which is defined by the Control Toolkit. GetVendors() yönteminin uygulanması oldukça kolaydır: kod AdventureWorks veritabanına bağlanır ve ilk 25 satıcıyı sorgular.The GetVendors() method is quite easy to implement: The code connects to the AdventureWorks database and queries the first 25 vendors. CascadingDropDownNameValue oluşturucudaki ilk parametre, ikinci bir değer olan (HTML 'nin <option> öğesi) değeri olan liste girişinin başlık öğesidir.The first parameter in the CascadingDropDownNameValue constructor is the caption of the list entry, the second one its value (value attribute in HTML's <option> element). Kod aşağıdaki gibidir:Here is the code:

<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 alma (Yöntem adı: GetContactsForVendor()), biraz karmaşık bir yöntemdir.Getting the associated contacts for a vendor (method name: GetContactsForVendor()) is a bit trickier. İlki, ilk açılan listede seçilen satıcının belirlenmesi gerekir.First of all, the vendor which has been selected in the first dropdown list must be determined. Denetim araç seti, bu görev için bir yardımcı yöntemi tanımlar: ParseKnownCategoryValuesString() yöntemi, açılan verileri içeren bir StringDictionary öğesi döndürür:The Control Toolkit defines a helper method for that task: The ParseKnownCategoryValuesString() method returns a StringDictionary element with the dropdown data:

<WebMethod()> _
Public Function GetContactsForVendor(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
 Dim VendorID As Integer
 CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)

Güvenlik nedenleriyle, önce bu verilerin doğrulanması gerekir.For security reasons, this data must be validated first. Bu nedenle, bir satıcı girişi varsa (ilk basamaklı Dingdropdown öğesinin Category özelliği "Vendor") olarak ayarlandığından, Seçili satıcının KIMLIĞI alınabilir:So if there is a Vendor entry (because the Category property of the first CascadingDropDown element is set to "Vendor"), the ID of the selected vendor may be retrieved:

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üz bir işlemdir ve sonra.The rest of the method is fairly straight-forward, then. Satıcının KIMLIĞI, söz konusu satıcının ilişkili tüm kişilerini alan bir SQL sorgusu için parametre olarak kullanılır.The vendor's ID is used as a parameter for an SQL query that retrieves all associated contacts for that vendor. Bir kez daha, yöntem CascadingDropDownNameValuetüründe bir dizi döndürür.Once again, the method returns an array of type CascadingDropDownNameValue.

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 girdi ile doldurulur.Load the ASP.NET page, and after a short while the vendor list is filled with 25 entries. Bir giriş seçin ve ikinci açılan listenin verilerle nasıl doldurulduğuna dikkat edin.Pick one entry and notice how the second dropdown list is filled with data.

ilk liste otomatik olarak doldurulurThe first list is filled automatically

İlk liste otomatik olarak doldurulur (tam boyutlu görüntüyü görüntülemek Için tıklayın)The first list is filled automatically (Click to view full-size image)

ikinci liste ilk listedeki seçime göre doldurulurThe second list is filled according to the selection in the first list

İkinci liste, ilk listedeki seçime göre doldurulur (tam boyutlu görüntüyü görüntülemek Için tıklayın)The second list is filled according to the selection in the first list (Click to view full-size image)