Använda formulärvyn med valfri datainsamling -- Visual Studio Magazine (2024)

Praktiskt .NET

Använda formulärvyn med valfri datainsamling

ASP.NET DataViews är kraftfulla verktyg när de kombineras med en datakälla. Men du kan hoppa över DataSource och använda DataViews för att hantera visning och uppdatering av vilken samling objekt du vill, med några rader kod.

  • FörbiPeter Vogel
  • 2011-04-10

Med FormView (eller någon av DataViews) använder jag normalt en DataSource för att flytta data från ett datalager och in i/ut ur vyn. Men FormView (och resten av DataViews) kommer att fungera lika bra med alla samlingar av objekt: Lists, Arrays, ArrayLists eller vilken samling du vill göra tillgänglig för användaren för visning och uppdatering. Du kommer inte att få automatisk generering av DataViews mallar och du måste skriva lite kod, men ur användarens synvinkel fungerar allt som om din DataView var knuten till en DataSource. Så här är hur du använder en FormView för att visa – och låta användaren uppdatera – vilken samling objekt som helst.

Efter att ha släppt FormView på din sida, lägg till, i händelsen Page Load, koden för att bygga din samling av objekt och ställ in DataViews DataSource-egenskap till den samlingen. Du måste också lagra den samlingen någonstans mellan användarens resor till servern -- Session-objektet är ett bra val.

I det här exemplet antar jag att jag visar en uppsättning kundobjekt av något slag i en List(of Customer). Jag kontrollerar först om listan finns i Session-objektet och, om den inte är det, bygger jag den. Jag ställer sedan in FormViews datakälla till listan:

custList = CType(Session("Kunder"), List(Of Customer))
Om custList är ingenting då
custList = Ny lista (över kund)
'...ladda lista med kundobjekt
Avslu*ta om
Me.FormView1.DataSource = custList

Därefter måste du lägga till dessa två rader kod till sidans PreRender-händelse så att de körs efter någon aktivitet du utför med FormView någon annanstans på sidan. Dessa två rader sparar data till Session-objektet och visar det aktuella tillståndet för data i FormView:

Me.Session("Kunder") = custList
Me.FormView1.DataBind()

Vid det här laget kommer du inte att få något visat eftersom du inte har lagt till några kontroller till mallarna i FormView. Men mallarna finns kvar: Öppna FormViews SmartTag och välj Redigera mallar; FormView kommer att växla till att visa dess ItemTemplate. Det kommer att vara tomt men det kommer att finnas där.

ItemTemplate används för att visa data i skrivskyddat läge; för att stödja det, dra en etikett till mallen för varje objektegenskap du vill visa. I det här exemplet vill jag visa mitt kundobjekts egenskaper för förnamn och efternamn, så jag lägger till två etiketter och lite text för att identifiera informationen i mallen.

När kontrollerna har lagts till i mallen kan du binda dem till objektets egenskaper. Som du skulle göra om du arbetar med en DataSource-kontroll, klicka på etikettens SmartTag och välj Redigera DataBindings. När dialogrutan DataBindings visas kommer rullgardinslistorna som normalt visar objekten du kan binda till att vara tomma. Istället måste du ange ett bindande uttryck i textrutan Koduttryck längst ned i dialogrutan. Det här uttrycket är väldigt enkelt i den nuvarande versionen av ASP.NET: anrop Bind-metoden och skicka namnet på egenskapen du vill binda till (för min LastName-egenskap skulle jag till exempel ange Bind(“LastName”).

Du bör också aktivera personsökning så att dina användare kommer att kunna se mer än bara det första föremålet i din samling. Även om alternativet EnablePaging inte visas på FormViews SmartTag, är det tillgängligt från FormViews egenskapslista; ställ bara in egenskapen till True (du kan använda egenskaperna för PagerSettings för att kontrollera vilka kontroller som visas för personsökning). FormView kommer att klaga om du inte har FormViews PageIndexChanging-händelse i din kodfil, så lägg till det också. Du behöver inte lägga in någon kod i eventet, men den måste finnas där.

Om du nu kör din sida kommer den att visa samlingens första objekt. Genom att använda personsökningskontrollerna längst ned i FormView kommer du att kunna bläddra igenom dina data.

Stöd för uppdateringar

Du är nu redo att lägga till lite uppdateringskod till din FormView. Det allmänna mönstret är att lägga till en knapp till din mall med ett nyckelord i knappens CommandName-egenskap. När ASP.NET ser dessa CommandName-värden kommer det att utlösa en händelse och du måste lägga in lite kod i den händelsen.

För att stödja ändring av befintligt objekt, till exempel, måste du lägga till en Button med dess CommandName-egenskap inställd på Edit till din ItemTemplate; för att stödja infogning av objekt, en knapp med dess CommandName-egenskap inställd på New; för borttagningar, en knapp med dess kommandonamn inställt på Ta bort. För knapparna Redigera och Ny måste du inkludera FormViews ModeChanging-händelse i din kodfil; till skillnad från PageIndexChanging-händelsen måste du den här gången lägga in kod i den. Du behöver bara en rad kod, och det är standard: ersätt "FormView1" med namnet på din DataView:

Me.FormView1.ChangeMode(e.NewMode)

Med dessa ändringar, när användaren klickar på Redigera-knapparna, kommer FormViews EditItemTemplate att visas; Om du klickar på knappen Infoga visas InsertItemTemplate (eller EditItemTemplate om du inte har skapat en InsertItemTemplate).

I båda dessa mallar vill du dra på några textrutor som låter användaren ange data. Som du gjorde med etiketterna, bind dem till egenskaper på ditt objekt. På EditItemTemplate kommer kontrollerna att visas med data från det aktuella objektet; på InsertItemTemplate kommer kontrollerna att visas utan data. Du vill också lägga till två knappar till varje mall: på EditItemTemplate, en knapp med dess kommandonamn inställt på Update; på InsertItemTemplate, en knapp med ett CommandName inställt på Insert; på båda mallarna, en knapp med dess kommandonamn inställt på Avbryt.

När användaren klickar på EditItemTemplates Spara-knapp, kommer ItemUpdating-händelsen att starta. I detta fall måste du hämta objektet som motsvarar data som visas och uppdatera dess egenskaper från data i FormView.

För att hämta rätt objekt från din samling, använd FormViews PageIndex-egenskap som ett index i din samling av objekt. För att hämta de värden som för närvarande visas i FormView, använd händelsens e-parameter. Dess NewValues-egenskap returnerar värdet från motsvarande kontroll på FormView, när den passerar ett egenskapsnamn. Det här exemplet flyttar data från kontrollerna bundna till egenskaperna Förnamn och Efternamn till motsvarande kundobjekt i min samling:

Dim cust Som kund

cust = custList(Me.FormView1.PageIndex)
cust.FirstName = e.NewValues("FirstName")
cust.LastName = e.NewValues("Efternamn")

När användaren klickar på knappen Infoga, aktiveras ItemInserting-händelsen. Du måste skapa en ny instans av din klass, fylla i dess egenskaper med data från FormView och lägga till det nya objektet i din samling. I mitt fall ser koden ut så här:

Dim cust Som kund

kund = Ny kund
cust.FirstName = e.Values("FirstName")
cust.LastName = e.Values("LastName")
custList.Add(cust)

Den goda nyheten är att du inte behöver skriva någon kod för att stödja Avbryt-knappen på någon av mallarna. När användare klickar på Avbryt-knappen visas objektmall automatiskt.

Ta bort-knappen på din ItemTemplate kräver ingen mall, men den aktiverar ItemDeleting-händelsen. I så fall måste du hitta motsvarande objekt i din samling och ta bort det. Jag använde denna kod:

custList.RemoveAt(Me.FormView1.PageIndex)

Det finns många trevligheter som skulle kunna läggas till i detta grundläggande formulär (viss datavalidering, byte tillbaka till ItemTemplate efter ItemUpdating-händelsen, visa ett meddelande för att försäkra användaren om att deras nya objekt har lagts till i ItemInserting-händelsen). Men med ett dussin rader kod (plus uppdragssatser för egenskaperna i din klass), kan du binda din Form/Details/Grid/ListView till vilken samling du vill.

Om författaren

Peter Vogel är systemarkitekt och rektor inom PH&V Information Services. PH&V tillhandahåller full-stack konsultation från UX-design via objektmodellering till databasdesign. Peter twittrar om sina VSM-kolumner med hashtaggen #vogelarticles. Hans blogginlägg om design av användarupplevelser finns påhttp://blog.learningtree.com/tag/ui/.

Använda formulärvyn med valfri datainsamling -- Visual Studio Magazine (2024)

FAQs

What's the difference between Visual Studio and Visual Studio code? ›

“Visual Studio” and “Visual Studio Code” are not the same thing. Visual Studio is an integrated development environment (IDE) and Visual Studio Code is a rich text editor like Sublime Text and Atom.

What is Visual Studio magazine? ›

A long-standing title in the Microsoft development space, Visual Studio Magazine provides timely and practical insight for the builders and architects of software solutions that have a direct impact on a company's success.

Which Visual Studio should I get? ›

Visual Studio Code is the best choice for web development. It offers incredible support with thousands of tools and extensions willing to work in your favour.

Is Visual Studio Code enough? ›

If you need to collaborate with team members on development or debugging, then Visual Studio is the better choice. If you need to do serious code analysis or performance profiling, or debug from a snapshot, then Visual Studio Enterprise will help you. VS Code tends to be popular in the data science community.

Is Visual Studio Code good for beginners? ›

While marketing primarily to professional programmers, VS Code is an excellent editor for students and other learner just getting started with HTML and CSS.

References

Top Articles
Latest Posts
Article information

Author: Tyson Zemlak

Last Updated:

Views: 5899

Rating: 4.2 / 5 (43 voted)

Reviews: 82% of readers found this page helpful

Author information

Name: Tyson Zemlak

Birthday: 1992-03-17

Address: Apt. 662 96191 Quigley Dam, Kubview, MA 42013

Phone: +441678032891

Job: Community-Services Orchestrator

Hobby: Coffee roasting, Calligraphy, Metalworking, Fashion, Vehicle restoration, Shopping, Photography

Introduction: My name is Tyson Zemlak, I am a excited, light, sparkling, super, open, fair, magnificent person who loves writing and wants to share my knowledge and understanding with you.