Amber - 27.202.039. Abrasion resistance is the surface wear of a fabric caused by rubbing and contact with another fabric. Seam slippage is the movement of yarns in a fabric that occurs when it is pulled apart at a seam. Crocking is the transfer of dye from the surface of a dyed or printed fabric onto another surface by rubbing. Last activity. My flashcards. Saved flashcards.
tarafından Scott Mitchellby Scott Mitchell
Örnek uygulamayı indirin veya PDF olarak indirinDownload Sample App or Download PDF
Bu öğreticide bir şablona ve alanları GridView veya DetailsView denetimi için özel düğmeler, ekleme şu konuları inceleyeceğiz.In this tutorial we'll look at how to add custom buttons, both to a template and to the fields of a GridView or DetailsView control.Özellikle, tedarikçileri sayfasında kullanıcıya izin veren bir FormView'da arabirimdeki oluşturacağız.In particular, we'll build an interface that has a FormView that allows the user to page through the suppliers.
GirişIntroduction
Rapor verilerine salt okunur erişim raporlama birçok senaryo içerir, ancak raporları görüntülenen verileri temel alan eylemleri gerçekleştirme olanağı dahil etmek için sık karşılaşılan bir durum değil.While many reporting scenarios involve read-only access to the report data, it's not uncommon for reports to include the ability to perform actions based upon the data displayed.Genellikle Bu raporda görüntülenen her bir kayıt ile düğme, LinkButton veya ImageButton Web denetim ekleme dahil, tıklandığında geri göndermeye neden olur ve bazı sunucu tarafı kodu çağırır.Typically this involved adding a Button, LinkButton, or ImageButton Web control with each record displayed in the report that, when clicked, causes a postback and invokes some server-side code.Kayıt kayıt temelinde verileri düzenleme ve silmeye en yaygın örnektir.Editing and deleting the data on a record-by-record basis is the most common example.Aslında, başlayarak gördüğümüz gibi genel bakış, ekleme, güncelleştirme ve silme veri FormView GridView ve DetailsView denetimlerini olmadan bu işlevselliğin destekleyebilir kadar sık Öğreticisi, düzenleme ve silme tek satırlık bir kod yazmak için gerekir.In fact, as we saw starting with the Overview of Inserting, Updating, and Deleting Data tutorial, editing and deleting is so common that the GridView, DetailsView, and FormView controls can support such functionality without the need for writing a single line of code.
Buna ek olarak düzenlemek ve düğmeler, GridView, DetailsView ve FormView silmek için denetimleri de düğmeler, LinkButtons veya ImageButtons içerebilir, tıklandığında, özel sunucu tarafı mantık gerçekleştirin.In addition to Edit and Delete buttons, the GridView, DetailsView, and FormView controls can also include Buttons, LinkButtons, or ImageButtons that, when clicked, perform some custom server-side logic.Bu öğreticide bir şablona ve alanları GridView veya DetailsView denetimi için özel düğmeler, ekleme şu konuları inceleyeceğiz.In this tutorial we'll look at how to add custom buttons, both to a template and to the fields of a GridView or DetailsView control.Özellikle, tedarikçileri sayfasında kullanıcıya izin veren bir FormView'da arabirimdeki oluşturacağız.In particular, we'll build an interface that has a FormView that allows the user to page through the suppliers.İçin belirli bir tedarikçi, FormView tedarikçi seçeneğine tıkladıysanız, tüm bunların ilişkili ürünleri kullanımdan olarak işaretler, bir düğme Web denetimi hakkında bilgi gösterir.For a given supplier, the FormView will show information about the supplier along with a Button Web control that, if clicked, will mark all of their associated products as discontinued.Ayrıca, GridView artırmak fiyat ve indirimli fiyat, seçeneğine tıkladıysanız, yükseltmek veya ürün azaltmak düğmeler içeren her satır seçili sağlayıcı tarafından sağlanan bu ürünlerin listeler
UnitPrice 10 oranında (bkz. Şekil 1).Additionally, a GridView lists those products provided by the selected supplier, with each row containing Increase Price and Discount Price Buttons that, if clicked, raise or reduce the product's UnitPrice by 10% (see Figure 1).
Şekil 1: FormView ve GridView içeren düğmeler, özel eylemleri (tam boyutlu görüntüyü görmek için tıklatın)Figure 1: Both the FormView and GridView Contain Buttons That Perform Custom Actions (Click to view full-size image)
1. Adım: Düğme Eğitmen Web sayfaları eklemeStep 1: Adding the Button Tutorial Web Pages
Özel bir düğme eklemek nasıl tümleştirildiği incelenmektedir önce öncelikle Bu öğretici için yapmamız gereken Web sitesi Projemizin ASP.NET sayfaları oluşturmak için bir zaman ayırabiliriz.Before we look at how to add a custom buttons, let's first take a moment to create the ASP.NET pages in our website project that we'll need for this tutorial.Başlangıç adlı yeni bir klasör ekleyerek
CustomButtons .Start by adding a new folder named CustomButtons .Ardından, o klasördeki her bir sayfayla ilişkilendirilecek emin olmak için aşağıdaki iki ASP.NET sayfaları ekleyin Site.master ana sayfa:Next, add the following two ASP.NET pages to that folder, making sure to associate each page with the Site.master master page:
Şekil 2: Özel düğmeler ilgili öğreticiler için ASP.NET sayfaları eklemeFigure 2: Add the ASP.NET Pages for the Custom Buttons-Related Tutorials
Diğer klasörler gibi
Default.aspx içinde CustomButtons klasörü kendi bölümünde öğreticileri listeler.Like in the other folders, Default.aspx in the CustomButtons folder will list the tutorials in its section.Bu geri çağırma SectionLevelTutorialListing.ascx kullanıcı denetimi bu işlevselliği sağlar.Recall that the SectionLevelTutorialListing.ascx User Control provides this functionality.Bu nedenle, bu kullanıcı denetimine ekleme Default.aspx sayfanın Tasarım görünümü Çözüm Gezgini'nden sürükleyerek.Therefore, add this User Control to Default.aspx by dragging it from the Solution Explorer onto the page's Design view.
Şekil 3: Ekleme
SectionLevelTutorialListing.ascx kullanıcı denetimine Default.aspx (tam boyutlu görüntüyü görmek için tıklatın)Figure 3: Add the SectionLevelTutorialListing.ascx User Control to Default.aspx (Click to view full-size image)
Son olarak, girişleri olarak istediğiniz sayfaları eklemek
Web.sitemap dosya.Lastly, add the pages as entries to the Web.sitemap file.Özellikle, aşağıdaki biçimlendirme sayfalama ve sıralama sonra eklemeniz <siteMapNode> :Specifically, add the following markup after the Paging and Sorting <siteMapNode> :
Güncelleştirdikten sonra
Web.sitemap , bir tarayıcı aracılığıyla öğreticiler Web sitesini görüntülemek için bir dakikanızı ayırın.After updating Web.sitemap , take a moment to view the tutorials website through a browser.Sol taraftaki menüden, artık düzenleme, ekleme ve silme öğreticiler için öğeleri içerir.The menu on the left now includes items for the editing, inserting, and deleting tutorials.
Şekil 4: Site Haritası, giriş artık özel düğmeler öğretici içerir.Figure 4: The Site Map Now Includes the Entry for the Custom Buttons Tutorial
2. Adım: Tedarikçileri listeleyen bir FormView'da eklemeStep 2: Adding a FormView that Lists the Suppliers
Bu öğreticiyle tedarikçileri listeler FormView ekleyerek başlayalım.Let's get started with this tutorial by adding the FormView that lists the suppliers.Giriş açıklandığı gibi bu FormView sayfası aracılığıyla gösteren GridView tedarikçi sağladığı ürünler Tedarikçiler, kullanıcıya izin verir.As discussed in the Introduction, this FormView will allow the user to page through the suppliers, showing the products provided by the supplier in a GridView.Ayrıca, bu FormView bir düğme içerir, tıklandığında, tüm tedarikçi ürünleri kullanımdan olarak işaretler.Additionally, this FormView will include a Button that, when clicked, will mark all of the supplier's products as discontinued.Biz kendimize FormView için özel bir düğme ekleme ile ilgili önce böylece üretici bilgilerini görüntüler ilk yalnızca FormView oluşturalım.Before we concern ourselves with adding the custom button to the FormView, let's first just create the FormView so that it displays the supplier information.
Başlangıç açarak
CustomButtons.aspx sayfasını CustomButtons klasör.Start by opening the CustomButtons.aspx page in the CustomButtons folder.Bir FormView'da kümesi ve Tasarımcısı araç kutusundan sürükleyerek sayfaya ekleyin, ID özelliğini Suppliers .Add a FormView to the page by dragging it from the Toolbox onto the Designer and set its ID property to Suppliers .FormView akıllı etiketten adlı yeni bir ObjectDataSource oluşturmak için iyileştirilmiş SuppliersDataSource .From the FormView's smart tag, opt to create a new ObjectDataSource named SuppliersDataSource .
Şekil 5: Adlı yeni bir ObjectDataSource oluşturma
SuppliersDataSource (tam boyutlu görüntüyü görmek için tıklatın)Figure 5: Create a New ObjectDataSource Named SuppliersDataSource (Click to view full-size image)
Bu yeni ObjectDataSource gelen sorgular gibi yapılandırma
SuppliersBLL sınıfın GetSuppliers() metodu (bkz. Şekil 6).Configure this new ObjectDataSource such that it queries from the SuppliersBLL class's GetSuppliers() method (see Figure 6).Bu FormView (hiçbiri) güncelleştirme sekmeyi aşağı açılan listeden seçeneğini tedarikçi bilgi, select güncelleştirmek için bir arabirimi sağlamadığından.Since this FormView does not provide an interface for updating the supplier information, select the (None) option from the drop-down list in the UPDATE tab.
Şekil 6: Kullanılacak veri kaynağını yapılandırma
SuppliersBLL sınıfın GetSuppliers() yöntemi (tam boyutlu görüntüyü görmek için tıklatın)Figure 6: Configure the Data Source to use the SuppliersBLL Class's GetSuppliers() Method (Click to view full-size image)
ObjectDataSource yapılandırdıktan sonra Visual Studio oluşturacak bir
InsertItemTemplate , EditItemTemplate , ve ItemTemplate FormView için.After configuring the ObjectDataSource, Visual Studio will generate an InsertItemTemplate , EditItemTemplate , and ItemTemplate for the FormView.Kaldırma InsertItemTemplate ve EditItemTemplate ve değiştirme ItemTemplate yalnızca tedarikçi şirket adını ve telefon numarasını görüntüler.Remove the InsertItemTemplate and EditItemTemplate and modify the ItemTemplate so that it displays just the supplier's company name and phone number.Son olarak, disk belleği desteği FormView akıllı etiketinde sayfalama etkinleştir onay kutusunu işaretleyerek etkinleştirmek (veya ayarlayarak onun AllowPaging özelliğini True ).Finally, turn on paging support for the FormView by checking the Enable Paging checkbox from its smart tag (or by setting its AllowPaging property to True ).Bu değişikliklerden sonra bildirim temelli işaretleme, sayfanın aşağıdakine benzer görünmelidir:After these changes your page's declarative markup should look similar to the following:
Şekil 7 bir tarayıcıdan görüntülendiğinde CustomButtons.aspx sayfada gösterilir.Figure 7 shows the CustomButtons.aspx page when viewed through a browser.
Şekil 7: FormView listeler
CompanyName ve Phone şu anda seçili sağlayıcı alanlardan (tam boyutlu görüntüyü görmek için tıklatın)Figure 7: The FormView Lists the CompanyName and Phone Fields from the Currently Selected Supplier (Click to view full-size image)
3. Adım: Seçili tedarikçi ürünleri listeleyen GridView eklemeStep 3: Adding a GridView that Lists the Selected Supplier's Products
Tüm ürünler Durdur düğmesini FormView şablona ekleyebilmek ilk seçilen sağlayıcısı tarafından sağlanan olduğu ürünleri listeler FormView altındaki GridView ekleyelim.Before we add the Discontinue All Products Button to the FormView's template, let's first add a GridView beneath the FormView that lists the products provided by the selected supplier.Bunu başarmak eklemek için GridView sayfasına ayarlayın,
ID özelliğini SuppliersProducts , adlı yeni bir ObjectDataSource ekleyin SuppliersProductsDataSource .To accomplish this, add a GridView to the page, set its ID property to SuppliersProducts , and add a new ObjectDataSource named SuppliersProductsDataSource .
Şekil 8: Adlı yeni bir ObjectDataSource oluşturma
SuppliersProductsDataSource (tam boyutlu görüntüyü görmek için tıklatın)Figure 8: Create a New ObjectDataSource Named SuppliersProductsDataSource (Click to view full-size image)
Bu ObjectDataSource ProductsBLL sınıfın kullanmak için yapılandırma
GetProductsBySupplierID(supplierID) metodu (bkz. Şekil 9).Configure this ObjectDataSource to use the ProductsBLL class's GetProductsBySupplierID(supplierID) method (see Figure 9).Bu GridView ürünün fiyatını ayarlanacak izin verir ancak düzenleme veya GridView ' özellikleri silme yerleşik kullanarak olmaz.While this GridView will allow for a product's price to be adjusted, it won't be using the built-in editing or deleting features from the GridView.Bu nedenle, biz ObjectDataSource kullanıcının INSERT, UPDATE ve sekmeleri silmek için aşağı açılan listesine (hiçbiri) ayarlayabilirsiniz.Therefore, we can set the drop-down list to (None) for the ObjectDataSource's UPDATE, INSERT, and DELETE tabs.
Şekil 9: Kullanılacak veri kaynağını yapılandırma
ProductsBLL sınıfın GetProductsBySupplierID(supplierID) yöntemi (tam boyutlu görüntüyü görmek için tıklatın)Figure 9: Configure the Data Source to use the ProductsBLL Class's GetProductsBySupplierID(supplierID) Method (Click to view full-size image)
Bu yana
GetProductsBySupplierID(supplierID) yöntemi kabul giriş parametresi, bize Bu parametre değerinin kaynağı ObjectDataSource Sihirbazı'nı ister.Since the GetProductsBySupplierID(supplierID) method accepts an input parameter, the ObjectDataSource wizard prompts us for the source of this parameter value.İçinde geçirilecek SupplierID değer FormView seçin için parametre kaynak aşağı açılan liste denetimi ve ControlId aşağı açılan listeye ayarlayın Suppliers (FormView kimliği 2. adımda oluşturmuştunuz).To pass in the SupplierID value from the FormView, set the Parameter source drop-down list to Control and the ControlID drop-down list to Suppliers (the ID of the FormView created in Step 2).
Şekil 10: Belirtmek
supplierID gereken parametre gelen Suppliers FormView denetimi (tam boyutlu görüntüyü görmek için tıklatın)Figure 10: Indicate that the supplierID Parameter Should Come from the Suppliers FormView Control (Click to view full-size image)
ObjectDataSource sihirbazını tamamladıktan sonra GridView BoundField veya CheckBoxField her ürünün veri alanlarını içerir.After completing the ObjectDataSource wizard, the GridView will contain a BoundField or CheckBoxField for each of the product's data fields.Şimdi bu aşağı göstermek için kesim yalnızca
ProductName ve UnitPrice BoundFields ile birlikte Discontinued CheckBoxField; Ayrıca, şimdi biçimlendirme UnitPrice BoundField sağlayacak şekilde metni bir para birimi olarak biçimlendirilir.Let's trim this down to show just the ProductName and UnitPrice BoundFields along with the Discontinued CheckBoxField; furthermore, let's format the UnitPrice BoundField such that its text is formatted as a currency.GridView ve SuppliersProductsDataSource ObjectDataSource bildirim temelli biçimlendirme, aşağıdaki işaretlemede benzer görünmelidir:Your GridView and SuppliersProductsDataSource ObjectDataSource's declarative markup should look similar to the following markup:
Bu noktada öğreticimize FormView üst öğesinden bir sağlayıcı seçin ve altındaki GridView aracılığıyla üretici tarafından sağlanan ürünleri görüntülemek için kullanıcının bir ana/ayrıntılar raporu görüntüler.At this point our tutorial displays a master/details report, allowing the user to pick a supplier from the FormView at the top and to view the products provided by that supplier through the GridView at the bottom.Şekil 11 Tokyo Traders tedarikçi FormView seçerken bu sayfanın ekran görüntüsü gösterilmektedir.Figure 11 shows a screen shot of this page when selecting the Tokyo Traders supplier from the FormView.
Şekil 11: Seçili tedarikçi ürünleri GridView görüntülenir (tam boyutlu görüntüyü görmek için tıklatın)Figure 11: The Selected Supplier's Products are Displayed in the GridView (Click to view full-size image)
4. Adım: Tüm ürünler için bir sağlayıcı kesmek için DAL ve BLL yöntemler oluşturmaStep 4: Creating DAL and BLL Methods to Discontinue All Products for a Supplier
Bir düğme için FormView eklemeden önce tıklandığında, tüm sona erdirir tedarikçi ürünlerin, ilk DAL ve bu eylem gerçekleştiren BLL için bir yöntem eklemek ihtiyacımız.Before we can add a Button to the FormView that, when clicked, discontinues all of the supplier's products, we first need to add a method to both the DAL and BLL that performs this action.Özellikle, bu yöntem adlandırılacağını
DiscontinueAllProductsForSupplier(supplierID) .In particular, this method will be named DiscontinueAllProductsForSupplier(supplierID) .FormView düğmesine tıklandığında, biz bu yöntemi, iş mantığı katmanı geçirme seçili tedarikçi çağırma SupplierID ; BLL verecek karşılık gelen veri erişim katmanı yönteme sonra çağıran bir UPDATE deyimi veritabanında, belirtilen tedarikçi ürünleri sona erdirir.When the FormView's Button is clicked, we'll invoke this method in the Business Logic Layer, passing in the selected supplier's SupplierID ; the BLL will then call down to the corresponding Data Access Layer method, which will issue an UPDATE statement to the database that discontinues the specified supplier's products.
Önceki öğreticilerimizden uyguladığımız gibi bir aşağıdan yukarıya yaklaşım DAL yöntemi, ardından BLL yöntemi oluşturma ve son olarak ASP.NET sayfasında işlevlerini uygulama ile başlayan kullanacağız.As we have done in our previous tutorials, we'll use a bottom-up approach, starting with creating the DAL method, then the BLL method, and finally implementing the functionality in the ASP.NET page.Açık
Northwind.xsd türü belirtilmiş veri kümesi App_Code/DAL klasör ve bir yeni yöntem ekleyin ProductsTableAdapter (sağ ProductsTableAdapter ve Sorgu Ekle seçin).Open the Northwind.xsd Typed DataSet in the App_Code/DAL folder and add a new method to the ProductsTableAdapter (right-click on the ProductsTableAdapter and choose Add Query).Bunun yapılması bize yeni yöntem ekleme işleminde size kılavuzluk eder TableAdapter sorgu Yapılandırma Sihirbazı çıkarır.Doing so will bring up the TableAdapter Query Configuration wizard, which walks us through the process of adding the new method.Bizim DAL yöntemi geçici SQL deyimi kullandığınızı belirterek başlayın.Start by indicating that our DAL method will use an ad-hoc SQL statement.
Şekil 12: DAL yöntemini kullanarak bir geçici SQL ifadesi oluşturma (tam boyutlu görüntüyü görmek için tıklatın)Figure 12: Create the DAL Method Using an Ad-Hoc SQL Statement (Click to view full-size image)
Ardından, sihirbaz bize ne tür bir sorgu oluşturmak için farklı ister.Next, the wizard prompts us as to what type of query to create.Olduğundan
DiscontinueAllProductsForSupplier(supplierID) yöntemi güncelleştirmeniz gerekir Products ayarlama, veritabanı tablosu Discontinued alanında belirtilen tarafından sağlanan tüm ürünler için 1 supplierID , verileri güncelleştiren bir sorgu için oluşturmamız gerekir.Since the DiscontinueAllProductsForSupplier(supplierID) method will need to update the Products database table, setting the Discontinued field to 1 for all products provided by the specified supplierID , we need to create a query that updates data.
Şekil 13: Güncelleştirme sorgu türünü seçin (tam boyutlu görüntüyü görmek için tıklatın)Figure 13: Choose the UPDATE Query Type (Click to view full-size image)
TableAdapter mevcut sonraki sihirbaz ekranında sağlar
UPDATE tanımlanan alanların her biri güncelleştiren deyimi Products DataTable.The next wizard screen provides the TableAdapter's existing UPDATE statement, which updates each of the fields defined in the Products DataTable.Bu sorgu metni, aşağıdaki ifade ile değiştirin:Replace this query text with the following statement:
Bu sorgu girme ve İleri'yi tıklatmadan sonra yeni yöntemin adı kullanmak için son Sihirbazı ekran ister
DiscontinueAllProductsForSupplier .After entering this query and clicking Next, the last wizard screen asks for the new method's name use DiscontinueAllProductsForSupplier .Son düğmesini tıklatarak Sihirbazı tamamlayın.Complete the wizard by clicking the Finish button.Veri kümesini tasarımcıya döndüren bağlı yeni bir yöntemde görmelisiniz ProductsTableAdapter adlı DiscontinueAllProductsForSupplier(@SupplierID) .Upon returning to the DataSet Designer you should see a new method in the ProductsTableAdapter named DiscontinueAllProductsForSupplier(@SupplierID) .
Şekil 14: Yeni DAL yöntem adı
DiscontinueAllProductsForSupplier (tam boyutlu görüntüyü görmek için tıklatın)Figure 14: Name the New DAL Method DiscontinueAllProductsForSupplier (Click to view full-size image)
İle
DiscontinueAllProductsForSupplier(supplierID) bizim sonraki görev veri erişim katmanında oluşturulan yöntemi olduğundan oluşturmak için DiscontinueAllProductsForSupplier(supplierID) iş mantığı katmanı yöntemi.With the DiscontinueAllProductsForSupplier(supplierID) method created in the Data Access Layer, our next task is to create the DiscontinueAllProductsForSupplier(supplierID) method in the Business Logic Layer.Bunu gerçekleştirmek için açık ProductsBLL sınıf dosyası ve aşağıdakileri ekleyin:To accomplish this, open the ProductsBLL class file and add the following:
Bu yöntem yalnızca aşağı çağırır
DiscontinueAllProductsForSupplier(supplierID) sağlanan geçirme DAL yönteminde supplierID parametre değeri.This method simply calls down to the DiscontinueAllProductsForSupplier(supplierID) method in the DAL, passing along the provided supplierID parameter value.Yalnızca belirli koşullar altında sona erecek şekilde bir tedarikçi ürünleri izin verilen herhangi bir iş kuralları varsa, bu kuralları burada BLL uygulanmalıdır.If there were any business rules that only allowed a supplier's products to be discontinued under certain circumstances, those rules should be implemented here, in the BLL.
Note
Farklı
UpdateProduct de aşırı ProductsBLL sınıfı DiscontinueAllProductsForSupplier(supplierID) yöntem imzası içermez DataObjectMethodAttribute özniteliği (<System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, Boolean)> ).Unlike the UpdateProduct overloads in the ProductsBLL class, the DiscontinueAllProductsForSupplier(supplierID) method signature does not include the DataObjectMethodAttribute attribute (<System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, Boolean)> ).Bu ışığının DiscontinueAllProductsForSupplier(supplierID) güncelleştirme sekmesinde ObjectDataSource veri kaynağı Yapılandırma Sihirbazı'nın aşağı açılan listeden yöntemi. Ben ve biz çağırma çünkü bu öznitelik atlanmış DiscontinueAllProductsForSupplier(supplierID) doğrudan ASP.NET sayfamızı bir olay işleyicisi yöntemi.This precludes the DiscontinueAllProductsForSupplier(supplierID) method from the ObjectDataSource's Configure Data Source wizard's drop-down list in the UPDATE tab. I ve omitted this attribute because we'll be calling the DiscontinueAllProductsForSupplier(supplierID) method directly from an event handler in our ASP.NET page.
5. Adım: Ekleme bir FormView tüm ürünleri düğmeye DurdurStep 5: Adding a Discontinue All Products Button to the FormView
İle
DiscontinueAllProductsForSupplier(supplierID) BLL ve DAL tam yönteminde, tüm ürünler için seçilen tedarikçi bulunmayarak özelliği eklemek için son adımdır FormView düğmesi Web denetimi eklemek için ItemTemplate .With the DiscontinueAllProductsForSupplier(supplierID) method in the BLL and DAL complete, the final step for adding the ability to discontinue all products for the selected supplier is to add a Button Web control to the FormView's ItemTemplate .Böyle bir düğme Tedarikçi telefon numarası ile düğme metni, kesmek tüm ürünleri aşağıda ekleyelim ve bir ID özelliği değerinin DiscontinueAllProductsForSupplier .Let's add such a Button below the supplier's phone number with the button text, Discontinue All Products and an ID property value of DiscontinueAllProductsForSupplier .Akıllı etiket FormView Şablonları Düzenle bağlantısına tıklayarak bu düğme Web denetimi Tasarımcısı aracılığıyla ekleyebilirsiniz (bkz. Şekil 15), veya doğrudan bildirim temelli söz dizimi.You can add this Button Web control through the Designer by clicking on the Edit Templates link in the FormView's smart tag (see Figure 15), or directly through the declarative syntax.
Şekil 15: FormView kesmek tüm ürünleri düğme Web denetimi ekleme
ItemTemplate (tam boyutlu görüntüyü görmek için tıklatın)Figure 15: Add a Discontinue All Products Button Web Control to the FormView's ItemTemplate (Click to view full-size image)
Ne zaman düğmesine tıklandığında bir kullanıcı ziyaret edin sayfasında, bir geri gönderme ensues ve FormView ile
ItemCommand olay ateşlenir.When the Button is clicked by a user visiting the page, a postback ensues and the FormView's ItemCommand event fires.Bu düğmeye tıkladı yanıt özel kod yürütmek için bu olay için bir olay işleyicisi oluşturabiliriz.To execute custom code in response to this Button being clicked, we can create an event handler for this event., Yine de anlamak ItemCommand olay ateşlenir herhangi düğmesi, LinkButton veya ImageButton Web denetimi FormView içinde tıkladı.Understand, though, that the ItemCommand event fires whenever any Button, LinkButton, or ImageButton Web control is clicked within the FormView.Diğer bir deyişle, kullanıcı bir sayfadan diğerine FormView getirdiğinde ItemCommand olay harekete geçirilir; kullanıcı yeni, düzenleme, tıklar veya ekleme, güncelleme veya silme destekleyen bir FormView'da Sil aynı şey.That means that when the user moves from one page to another in the FormView, the ItemCommand event fires; same thing when the user clicks New, Edit, or Delete in a FormView that supports inserting, updating, or deleting.
Bu yana
ItemCommand bakılmaksızın olay işleyicisi ihtiyacımız tüm ürünleri Durdur düğmesine tıklandığını belirleme için bir yol veya başka bir düğme ise hangi düğmeye tıklandığında harekete geçirilir.Since the ItemCommand fires regardless of what button is clicked, in the event handler we need a way to determine if the Discontinue All Products Button was clicked or if it was some other button.Bunu yapmak için biz düğmesi Web denetimin ayarlayabilirsiniz CommandName özelliğini bazı tanımlayan bir değer.To accomplish this, we can set the Button Web control's CommandName property to some identifying value.Ne zaman düğmesine tıklandığında, bu CommandName içine geçirilen değer ItemCommand olay işleyicisi, tüm ürünleri Durdur düğmesini tıklanan düğme olup olmadığını belirlemek için bize etkinleştirme.When the Button is clicked, this CommandName value is passed into the ItemCommand event handler, enabling us to determine whether the Discontinue All Products Button was the button clicked.Kesmek tüm ürünleri düğmenin ayarlamak CommandName DiscontinueProducts özelliği.Set the Discontinue All Products Button's CommandName property to DiscontinueProducts .
Son olarak, kullanıcının gerçekten seçili tedarikçi ürünleri devam etmek istediğini emin olmak için şimdi bir istemci-tarafı Onayla iletişim kutusunu kullanın.Finally, let's use a client-side confirm dialog box to ensure that the user really wants to discontinue the selected supplier's products.İçinde gördüğümüz gibi ekleme istemci tarafı doğrulama zaman silme öğretici, bu gerçekleştirilebilir JavaScript bir bit.As we saw in the Adding Client-Side Confirmation When Deleting tutorial, this can be accomplished with a bit of JavaScript.Özellikle, düğme Web denetimin OnClientClick özelliğini ayarlayın
return confirm('This will mark _all_ of this supplier's products as discontinued. Are you certain you want to do this?'); In particular, set the Button Web control's OnClientClick property to return confirm('This will mark _all_ of this supplier's products as discontinued. Are you certain you want to do this?');
Bu değişiklikleri yaptıktan sonra FormView bildirim temelli söz dizimi aşağıdaki gibi görünmelidir:After making these changes, the FormView's declarative syntax should look like the following:
Ardından, FormView için bir olay işleyicisi oluşturun
ItemCommand olay.Next, create an event handler for the FormView's ItemCommand event.Bu olay işleyicisinde biz önce tüm ürünleri Durdur düğmesine tıklandığını olup olmadığını belirlemeniz gerekir.In this event handler we need to first determine whether the Discontinue All Products Button was clicked.Bu nedenle, biz bir örneğini oluşturmak istiyorsanız ProductsBLL sınıfı ve çağırma kendi DiscontinueAllProductsForSupplier(supplierID) tümleştirilmesidir yöntemi SupplierID , seçili FormView:If so, we want to create an instance of the ProductsBLL class and invoke its DiscontinueAllProductsForSupplier(supplierID) method, passing in the SupplierID of the selected FormView:
Unutmayın
SupplierID FormView'da geçerli seçili sağlayıcısının FormView kullanılarak erişilebilir SelectedValue özelliği.Note that the SupplierID of the current selected supplier in the FormView can be accessed using the FormView's SelectedValue property.SelectedValue Özelliği ilk veri anahtar FormView'da görüntülenmesini kaydın değerini döndürür.The SelectedValue property returns the first data key value for the record being displayed in the FormView.FormView DataKeyNames özelliği, verilerin anahtar değerlerini alanları çekilen, verileri gösteren otomatik olarak ayarlandığı SupplierID ObjectDataSource FormView için bağlama sırasında Visual Studio tarafından Adım 2'de geri.The FormView's DataKeyNames property, which indicates the data fields from which the data key values are pulled from, was automatically set to SupplierID by Visual Studio when binding the ObjectDataSource to the FormView back in Step 2.
İle
ItemCommand oluşturulan olay işleyicisi sayfayı test etmek için biraz yararlanın.With the ItemCommand event handler created, take a moment to test out the page.Cooperativa de Quesos için Gözat 'Las Cabras' tedarikçi (benim için FormView'da beşinci tedarikçi olmadığı).Browse to the Cooperativa de Quesos 'Las Cabras' supplier (it's the fifth supplier in the FormView for me).İkisi de olan iki ürünler, Queso Cabrales ve Queso Manchego La Pastora, bu sağlayıcı sağlar değil kullanımdan kaldırıldı.This supplier provides two products, Queso Cabrales and Queso Manchego La Pastora, both of which are not discontinued.
Cooperativa de Quesos 'Las Cabras' faaliyet geçti ve bu nedenle sona erecek şekilde ürünlerinden olduğunu hayal edin.Imagine that Cooperativa de Quesos 'Las Cabras' has gone out of business and therefore its products are to be discontinued.' E tıklayın tüm ürünleri düğmesi bırakmaktır.Click the Discontinue All Products Button.Bu istemci-tarafı Onayla iletişim kutusu görüntüler (bkz. Şekil 16) kutusunda.This will display the client-side confirm dialog box (see Figure 16).
Şekil 16: Cooperativa de Quesos Las Cabras kaynakları iki etkin ürünler (tam boyutlu görüntüyü görmek için tıklatın)Figure 16: Cooperativa de Quesos Las Cabras Supplies Two Active Products (Click to view full-size image)
İstemci tarafı Onayla iletişim kutusunda Tamam'ı, form gönderme, geri göndermeye neden devam FormView
ItemCommand olayını ateşle.If you click OK in the client-side confirm dialog box, the form submission will proceed, causing a postback in which the FormView's ItemCommand event will fire.Çağrılırken, oluşturduğumuz olay işleyicisi sonra yürütülür DiscontinueAllProductsForSupplier(supplierID) yöntemi ve Queso Cabrales hem Queso Manchego La Pastora ürünleri durduruluyor.The event handler we created will then execute, invoking the DiscontinueAllProductsForSupplier(supplierID) method and discontinuing both the Queso Cabrales and Queso Manchego La Pastora products.
GridView'ın görünüm durumu devre dışı bıraktıysanız, GridView'temel alınan veri deposuna her geri göndermede DataSet'e ve bu nedenle hemen (bkz. Şekil 17), bu iki ürün artık üretilmeyen yansıtacak şekilde güncelleştirilir.If you have disabled the GridView's view state, the GridView is being rebound to the underlying data store on every postback, and therefore will immediately be updated to reflect that these two products are now discontinued (see Figure 17).Ancak, GridView Görünüm durumuna devre dışı bıraktığınız değil, veri GridView'ın bu değişikliği yaptıktan sonra el ile yeniden bağlamanız gerekecektir.If, however, you have not disabled view state in the GridView, you will need to manually rebind the data to the GridView after making this change.Bunu yapmak için basitçe GridView'ın çağrı yapmak
DataBind() yöntemi çağırma hemen sonra DiscontinueAllProductsForSupplier(supplierID) yöntemi.To accomplish this, simply make a call to the GridView's DataBind() method immediately after invoking the DiscontinueAllProductsForSupplier(supplierID) method.
Şekil 17: Tüm ürünler Durdur düğmesine Tıklandıktan sonra tedarikçi ürünleri uygun şekilde güncelleştirilmiş olan (tam boyutlu görüntüyü görmek için tıklatın)Figure 17: After Clicking the Discontinue All Products Button, the Supplier's Products are Updated Accordingly (Click to view full-size image)
6. Adım: UpdateProduct aşırı ürünün fiyatını ayarlamak için iş mantığı katmanı oluşturmaStep 6: Creating an UpdateProduct Overload in the Business Logic Layer for Adjusting a Product's Price
Gibi tüm ürünleri Durdur düğmesini FormView'da, artan ve azalan GridView bir ürün için fiyat için düğmeler eklemek için ilk olarak uygun veri erişim katmanı ve iş mantığı katmanı yöntemleri eklemek ihtiyacımız var.Like with the Discontinue All Products Button in the FormView, in order to add buttons for increasing and decreasing the price for a product in the GridView we need to first add the appropriate Data Access Layer and Business Logic Layer methods.Biz zaten bir DAL tek ürün satır güncelleştiren bir yöntem olduğundan, biz için yeni bir aşırı yükleme oluşturarak bu işlevselliği sağlayabilen
UpdateProduct BLL yöntemi.Since we already have a method that updates a single product row in the DAL, we can provide such functionality by creating a new overload for the UpdateProduct method in the BLL.
Bizim geçmiş
UpdateProduct aşırı ürün alanları bileşimi skaler giriş değerleri olarak yaptıktan ve ardından belirtilen ürün için yalnızca bu alanları güncelleştirdik.Our past UpdateProduct overloads have taken in some combination of product fields as scalar input values and have then updated just those fields for the specified product.Bu aşırı yükleme için Biz bu standart biraz farklı ve bunun yerine ürünün içinde geçirin ProductID ve yüzde olarak ayarlamak UnitPrice (yeni geçirme aksine ayarlanmış UnitPrice kendisini).For this overload we'll vary slightly from this standard and instead pass in the product's ProductID and the percentage by which to adjust the UnitPrice (as opposed to passing in the new, adjusted UnitPrice itself).Bu yaklaşım ihtiyacımız geçerli ürün uygulamasının belirleme ile rahatsız etmeyi yoksa ASP.NET sayfası arka plan kod sınıfında yazma kodunu basitleştirir UnitPrice .This approach will simplify the code we need to write in the ASP.NET page code-behind class, since we don't have to bother with determining the current product's UnitPrice .
UpdateProduct Bu öğretici, aşağıda gösterilen için aşırı yükleme:The UpdateProduct overload for this tutorial is shown below:
Bu aşırı yükleme DAL'ın aracılığıyla belirtilen ürün hakkındaki bilgileri alır
GetProductByProductID(productID) yöntemi.This overload retrieves information about the specified product through the DAL's GetProductByProductID(productID) method.Ardından bakar olup olmadığını ürünün UnitPrice veritabanı atanmış NULL değeri.It then checks to see whether the product's UnitPrice is assigned a database NULL value.Bu durumda, fiyat bırakılır değiştirilmemiş.If it is, the price is left unaltered.Ancak, varsa, olmayan birNULL UnitPrice değeri, yöntem güncelleştirmeleri ürünün UnitPrice belirtilen yüzde (unitPriceAdjustmentPercent ).If, however, there is a non-NULL UnitPrice value, the method updates the product's UnitPrice by the specified percent (unitPriceAdjustmentPercent ).
7. Adım: GridView'a artırma ve azaltma düğmeleri eklemeStep 7: Adding the Increase and Decrease Buttons to the GridView
GridView (ve DetailsView) hem de alanlarının bir koleksiyonu oluşturulur.The GridView (and DetailsView) are both made up of a collection of fields.BoundFields CheckBoxFields ve TemplateField ek olarak, ASP.NET adından da anlaşılacağı gibi her satır için bir düğme, LinkButton veya ImageButton sahip bir sütun olarak işler ButtonField içerir.In addition to BoundFields, CheckBoxFields, and TemplateFields, ASP.NET includes the ButtonField, which, as its name implies, renders as a column with a Button, LinkButton, or ImageButton for each row.Benzer şekilde tıklayarak FormView herhangi düğmesi GridView sayfalama düğmeleri, düzenleme veya silme düğmeler, sıralama düğmeler ve benzeri içindeki geri göndermeye neden olur ve GridView'ın başlatır
RowCommand olay.Similar to the FormView, clicking any button within the GridView paging buttons, Edit or Delete buttons, sorting buttons, and so on causes a postback and raises the GridView's RowCommand event.
ButtonField sahip bir
CommandName her düğmeleri için belirtilen değer atayan özelliği CommandName özellikleri.The ButtonField has a CommandName property that assigns the specified value to each of its Buttons CommandName properties.FormView ile gibi CommandName değeri tarafından kullanılan RowCommand hangi düğmesine tıklandığını belirleme için olay işleyicisi.Like with the FormView, the CommandName value is used by the RowCommand event handler to determine which button was clicked.
GridView ile düğme metni fiyatı + 10 için iki yeni ButtonFields ekleyelim % ve diğer metin fiyat -10 ile %.Let's add two new ButtonFields to the GridView, one with a button text Price +10% and the other with the text Price -10%.Bu ButtonFields eklemek, GridView'ın akıllı etiketinde sütunları Düzenle bağlantısına tıklayın, sol üstteki listede ButtonField alan türünü seçin ve Ekle düğmesine tıklayın.To add these ButtonFields, click on the Edit Columns link from the GridView's smart tag, select the ButtonField field type from the list in the upper left and click the Add button.
Şekil 18: GridView'a iki ButtonFields EkleFigure 18: Add Two ButtonFields to the GridView
İki ButtonFields ilk iki GridView alanları olarak görünecek şekilde taşıyın.Move the two ButtonFields so that they appear as the first two GridView fields.Ardından, ayarlama
Text + %10 fiyat için bu iki ButtonFields ve fiyat -10 özelliklerini % ve CommandName IncreasePrice ve DecreasePrice, özellikleri sırasıyla.Next, set the Text properties of these two ButtonFields to Price +10% and Price -10% and the CommandName properties to IncreasePrice and DecreasePrice, respectively.Varsayılan olarak, bir ButtonField düğme, sütunu LinkButtons işler.By default, a ButtonField renders its column of buttons as LinkButtons.Bu, ancak ButtonField kişinin değiştirilebilir ButtonType özelliği.This can be changed, however, through the ButtonField's ButtonType property.Şimdi bu iki ButtonFields normal düğmeler işlenen sahip; Bu nedenle ButtonType özelliğini Button .Let's have these two ButtonFields rendered as regular push buttons; therefore, set the ButtonType property to Button .Şekil 19, bu değişiklikleri yaptıktan sonra alanları iletişim kutusu gösterir; Aşağıdaki bildirim temelli GridView'ın işaretleme olur.Figure 19 shows the Fields dialog box after these changes have been made; following that is the GridView's declarative markup.
Şekil 19: ButtonFields yapılandırma
Text , CommandName , ve ButtonType özellikleriFigure 19: Configure the ButtonFields Text , CommandName , and ButtonType Properties
Oluşturulan bu ButtonFields ile GridView için ait bir olay işleyicisi oluşturmak için son adım olan
RowCommand olay.With these ButtonFields created, the final step is to create an event handler for the GridView's RowCommand event.Çünkü harekete varsa bu olay işleyicisi ya da fiyatı + %10 veya % düğmeleri fiyat -10 tıklattığında, gereksinimlerini belirlemek için ProductID satır, düğmesine tıklandığını ve ardından çağırmak için ProductsBLL sınıfın UpdateProduct uygun geçirme yöntemi UnitPrice yüzde ayarlama ile birlikte ProductID .This event handler, if fired because either the Price +10% or Price -10% buttons were clicked, needs to determine the ProductID for the row whose button was clicked and then invoke the ProductsBLL class's UpdateProduct method, passing in the appropriate UnitPrice percentage adjustment along with the ProductID .Aşağıdaki kod, bu görevleri gerçekleştirir:The following code performs these tasks:
Belirleyebilmesi
ProductID satır için fiyatı + 10 % veya fiyat -10% düğmesine tıkladı, GridView'ın başvurmanız ihtiyacımız DataKeys koleksiyonu.In order to determine the ProductID for the row whose Price +10% or Price -10% button was clicked, we need to consult the GridView's DataKeys collection.Bu koleksiyon, belirtilen alanların değerlerini tutan DataKeyNames her GridView satırında özelliği.This collection holds the values of the fields specified in the DataKeyNames property for each GridView row.GridView'ın bu yana DataKeyNames özelliğinin ayarlandığı ProductID için Visual Studio tarafından ObjectDataSource GridView'a bağlanırken DataKeys(rowIndex).Value sağlar ProductID için belirtilen rowIndex.Since the GridView's DataKeyNames property was set to ProductID by Visual Studio when binding the ObjectDataSource to the GridView, DataKeys(rowIndex).Value provides the ProductID for the specified rowIndex.
ButtonField içinde otomatik olarak geçirir. rowIndex , düğmeye tıkladı aracılığıyla satırın
e.CommandArgument parametresi.The ButtonField automatically passes in the rowIndex of the row whose button was clicked through the e.CommandArgument parameter.Bu nedenle, belirlemek için ProductID satır için fiyatı + 10 % veya fiyat -10% düğmesine tıkladı, kullanıyoruz: Convert.ToInt32(SuppliersProducts.DataKeys(Convert.ToInt32(e.CommandArgument)).Value) .Therefore, to determine the ProductID for the row whose Price +10% or Price -10% button was clicked, we use: Convert.ToInt32(SuppliersProducts.DataKeys(Convert.ToInt32(e.CommandArgument)).Value) .
Olarak tüm ürünleri Bulunmayarak düğmesiyle GridView'ın görünüm durumu, devre dışı bıraktıysanız GridView temel alınan veri deposuna her geri göndermede DataSet'e ve bu nedenle hemen tıklama ile oluşan bir fiyat değişikliği yansıtacak şekilde güncelleştirilir düğme ya da.As with the Discontinue All Products button, if you have disabled the GridView's view state, the GridView is being rebound to the underlying data store on every postback, and therefore will immediately be updated to reflect a price change that occurs from clicking either of the buttons.Ancak, GridView Görünüm durumuna devre dışı bıraktığınız değil, veri GridView'ın bu değişikliği yaptıktan sonra el ile yeniden bağlamanız gerekecektir.If, however, you have not disabled view state in the GridView, you will need to manually rebind the data to the GridView after making this change.Bunu yapmak için basitçe GridView'ın çağrı yapmak
DataBind() yöntemi çağırma hemen sonra UpdateProduct yöntemi.To accomplish this, simply make a call to the GridView's DataBind() method immediately after invoking the UpdateProduct method.
Şekil 20 büyükanne Kelly'nın yerimizle göre sağlanan ürünlerin görüntülerken sayfada gösterilir.Figure 20 shows the page when viewing the products provided by Grandma Kelly's Homestead.Şekil 21, % düğmesini iki kez büyükanne'nın Böğürtlen dağıtabilir ve fiyat -10% düğme için bir kez için Northwoods Cranberry Sauce tıklatıldıktan + 10 fiyat sonra sonuçları gösterilmektedir.Figure 21 shows the results after the Price +10% button has been clicked twice for Grandma's Boysenberry Spread and the Price -10% button once for Northwoods Cranberry Sauce.
Şekil 20: GridView içeren fiyatı + %10 ve % düğmeleri -10 Fiyat (tam boyutlu görüntüyü görmek için tıklatın)Figure 20: The GridView Includes Price +10% and Price -10% Buttons (Click to view full-size image)
Şekil 21: Fiyatlar ilk ve üçüncü ürün güncelleştirildi + 10 fiyat üzerinden % ve % düğmeleri -10 Fiyat (tam boyutlu görüntüyü görmek için tıklatın)Figure 21: The Prices for the First and Third Product Have Been Updated via the Price +10% and Price -10% Buttons (Click to view full-size image)
Note
GridView (ve DetailsView) de düğmeler, LinkButtons veya kendi TemplateField için eklenen ImageButtons olabilir.The GridView (and DetailsView) can also have Buttons, LinkButtons, or ImageButtons added to their TemplateFields.GridView'ın BoundField ile tıklandığında bu düğmeler, bir geri gönderme anlamına şekilde yükseltme
RowCommand olay.As with the BoundField, these Buttons, when clicked, will induce a postback, raising the GridView's RowCommand event.Ne zaman ekleme düğmeleri bir TemplateField içinde ancak düğmenin CommandArgument ButtonFields kullanırken olduğu gibi satır dizini otomatik olarak ayarlanmadı.When adding buttons in a TemplateField, however, the Button's CommandArgument is not automatically set to the index of the row as it is when using ButtonFields.Satır dizini içinde tıklandığını düğmenin belirlemeniz gerekiyorsa RowCommand olay işleyicisi, düğmenin el ile ayarlamanız gerekir CommandArgument bildirim temelli söz dizimini kullanarak kod gibi TemplateField içinde bir özellik:If you need to determine the row index of the button that was clicked within the RowCommand event handler, you'll need to manually set the Button's CommandArgument property in its declarative syntax within the TemplateField, using code like:<asp:Button runat='server' ... CommandArgument='<%# ((GridViewRow) Container).RowIndex %>' .<asp:Button runat='server' ... CommandArgument='<%# ((GridViewRow) Container).RowIndex %>' .
ÖzetSummary
FormView GridView ve DetailsView denetimlerini tüm düğmeler, LinkButtons veya ImageButtons içerebilir.The GridView, DetailsView, and FormView controls all can include Buttons, LinkButtons, or ImageButtons.Böyle düğme tıklandığında, bir geri göndermeye neden olur ve yükseltmek
ItemCommand FormView ve DetailsView denetimlerini olayı ve RowCommand GridView olayı.Such buttons, when clicked, cause a postback and raise the ItemCommand event in the FormView and DetailsView controls and the RowCommand event in the GridView.Bu veri Web denetimleri kayıtlarını düzenleme veya silme gibi yaygın komut ile ilgili eylemler işlemek için yerleşik işlevselliğe sahiptir.These data Web controls have built-in functionality to handle common command-related actions, such as deleting or editing records.Ancak, aynı zamanda çözmeye çalışacağız kullanım düğmeler, tıklandığında, kendi özel kod yürütme ile yanıt.However, we can also use buttons that, when clicked, respond with executing our own custom code.
Bunu gerçekleştirmek için bir olay işleyicisi oluşturmak ihtiyacımız
ItemCommand veya RowCommand olay.To accomplish this, we need to create an event handler for the ItemCommand or RowCommand event.Bu olay işleyicisinde biz öncelikle gelen denetleme CommandName hangi düğmesine tıklandığını belirleme ve uygun özel eylem için değer.In this event handler we first check the incoming CommandName value to determine which button was clicked and then take appropriate custom action.Bu öğreticide düğmeler ve ButtonFields tüm ürünler için belirtilen bir tedarikçi kesmek veya artırmak veya belirli bir ürünün fiyatı 10 oranında azaltmak için nasıl kullanılacağını gördük.In this tutorial we saw how to use buttons and ButtonFields to discontinue all products for a specified supplier or to increase or decrease the price of a particular product by 10%.
Mutlu programlama!Happy Programming!
Yazar hakkındaAbout the Author
Scott Mitchell, yazar yedi ASP/ASP.NET kitaplardan ve poshbeauty.com sitesinin 4GuysFromRolla.com, Microsoft Web teknolojileriyle beri 1998'de çalışmaktadır.Scott Mitchell, author of seven ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998.Scott, bağımsız Danışman, Eğitimci ve yazıcı çalışır.Scott works as an independent consultant, trainer, and writer.En son nitelemiştir olan Unleashed'i öğretin kendiniz ASP.NET 2.0 24 saat içindeki.His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours.He adresinden ulaşılabilir [email protected].He can be reached at [email protected].veya kendi blog hangi bulunabilir http://ScottOnWriting.NET .or via his blog, which can be found at http://ScottOnWriting.NET.
Comments are closed.
|
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |