Kategoria Atrybuty Utworzony 09/10/2017
W programie Comarch ERP Optima istnieje możliwość zdefiniowania atrybutów dla towaru, umożliwiających pamiętanie większej ilości parametrów związanych z towarem. Parametry takie to np. kolor towaru, numer seryjny, położenie w magazynie, waga, termin ważności, kod (numer katalogowy) u dostawcy itp. Wykorzystanie atrybutów na poszczególnych kartach zależy od potrzeb danego towaru. Dodatkowe atrybuty karty rozszerzają także możliwości analityczne programu.
Istnieje możliwość wydruku atrybutu na fakturze. Można więc na zdefiniowanym wydruku faktury drukować np. datę ważności towaru, wagę lub położenie w magazynie.
Dodatkowo atrybut może mieć opcję związany z kontrahentem . Oznacza to, że dla atrybutu jego wartość będzie inna dla każdego kontrahenta. Taka funkcjonalność może być wykorzystana np. W przypadku deklarowania list kodów towarów u różnych dostawców lub odbiorców.
Atrybuty mogą być przenoszone na transakcje na dwa sposoby:
do pola tekstowego Opis na odrębną zakładkę [Atrybuty] na formularzu pozycji, co znacznie ułatwia analizę oraz filtrowanie dokumentów wg wykorzystanych atrybutów. Lista jest obsługiwana przez standardowe przyciski Dodaj, Usuń, Zmień . Należy przy tym pamiętać, że usunięcie definicji atrybutu jest możliwe tylko do czasu jego wykorzystania na karcie towaru.
Formularz Atrybutu towaru Definiując atrybuty, niezależnie od typu, należy określić:
Kod i nazwę atrybutu – należy przy tym pamiętać, że kod atrybutu będzie drukowany na dokumentach, powinien więc być czytelny.
Format – dla każdego atrybutu (podczas tworzenia jego definicji) można określić format pola zawierającego wartość:
tekst – pole tekstowe, liczba – pole sformatowane jako liczba z dokładnością do czterech miejsc po przecinku, lista – możliwość wcześniejszego zdefiniowania dostępnych wartości na odrębnej liście, podczas kojarzenia atrybutu z towarem wartość można wybrać z dostępnej listy rozwijanej, data – pole w formacie daty. W przypadku atrybutu typu lista podczas definiowania atrybutu (Ogólne/ Atrybuty ) na formularzu pojawia się druga zakładka [Pozycje listy] .
Na zakładce można wpisać wszystkie wartości, jakie dany atrybut może przyjąć. Jeżeli lista wartości atrybutu została zmodyfikowana (zmieniono lub usunięto wartości, które występują na towarach), w momencie zapisu formularza zostanie wyświetlony komunikat:
Wprowadzone zmiany zostaną zastosowane również na kartach towarowych, na których znajduje się ten atrybut. Czy chcesz kontynuować? Tak/ Nie.
Wybór opcji Nie powoduje powrót do edycji listy.
Wybór opcji Tak powoduje wykonanie operacji i zamknięcie okna definicji atrybutu. Na wszystkich kartach cennikowych, na których występuje atrybut, w przypadku:
modyfikacji wartości atrybutu, zaktualizowana zostanie jego wartość zgodnie z definicją usunięcia wartości z definicji, przypisany atrybut zostanie usunięty wraz z wartościąPozostałe parametry są zależne od typu atrybutu i zostały opisane w poniższych rozdziałach.
Uwaga
Lista atrybutów może być importowana pomiędzy bazami (Narzędzia/ Importy/ innej bazy danych ). W przypadku importu atrybutów towaru typu lista – przenoszona jest również lista dostępnych wartości.
W oknie każdego z atrybutów znajduje się parametr przenoś do Analiz BI , jeśli nie jest zaznaczony atrybuty nie są przenoszone do Analiz Business Intelligence (aplikacji umożliwiającej raportowanie danych z Comarch ERP Optima ).
Atrybuty towaru i załączniki Dodając nową definicję atrybutu towaru należy określić kilka parametrów ogólnych, definiujących atrybut:
Zależny od kontrahenta – parametr określa, czy wartość atrybutu jest niezmienna dla towaru, czy też różni się dla poszczególnych kontrahentów. Parametr powinien być zaznaczony np. W przypadku kodów towaru u dostawców – wtedy dla każdego towaru będzie można zdefiniować wiele kodów w zależności od kontrahenta dostarczającego towar.
Udostępniaj w Comarch e-Sklep – parametr związany ze współpracą programu ze sklepem internetowym (Comarch e-Sklep ). Atrybuty z zaznaczonym parametrem będą wraz z towarem eksportowane do e-Sklep , umożliwiając tym samym jego bardziej szczegółowe opisanie. Funkcja jest dostępna dla modułów Handel , Handel Plus . Zasady współpracy zostały opisane w artykule Współpraca z Comarch e-Sklep.
Język – opcja wyboru języka (dostępna w module Handel Plus ) związana jest z funkcjonalnością wielojęzyczności opisaną w artykule Formularz pozycji cennika – zakładka Języki.
Pozostałe atrybuty definiowane na formularzu są związane ze sposobem ich późniejszego przenoszenia na transakcję:
Dokleić do opisu elementu – parametr odpowiada za umieszczanie atrybutu na wystawianych dokumentach. Jeśli jest aktywny w chwili wpisywania towaru na dokument wartość takiego atrybutu jest automatycznie kopiowana jako opis towaru na dokumencie (w pole tekstowe). Zawartość tego pola jest drukowana na standardowych wydrukach dokumentów w programie.
Przenosić na transakcję – jeśli parametr jest zaznaczony to atrybut wraz z wartością jest przenoszony na odrębną zakładkę [Atrybuty] na element dokumentu.
Drukować na dokumencie – parametr związany z poprzednim. Jeśli jest zaznaczony to atrybut (po przeniesieniu na zakładkę Atrybuty na transakcji) wraz z wartością są drukowane na dokumentach.
W przypadku atrybutu towaru można określić dodatkowy format atrybutu: binaria . Atrybut binarny pozwala na skojarzenie towaru z dowolnym plikiem (na przykład grafiką, obrazkiem itp. ). Atrybuty binarne nie są kopiowane na transakcje.
Przy włączonym module Handel Plus na karcie atrybutu pojawia się sekcja Pozycje, zasoby z parametrami Przenosić na dostawy i Obowiązkowy . Funkcjonalność została dokładniej opisana w artykule Cechy dostaw.
Przypisanie atrybutu do towaru Jeśli lista atrybutów jest zdefiniowana można przystąpić do ich uzupełniania na kartach poszczególnych towarów. Jest to możliwe z poziomu formularza towaru: zakładka [Atrybuty] .
Lista atrybutów skojarzonych z danym towarem jest obsługiwana przez standardowe przyciski: Dodaj, Usuń, Zmień.
Dodając nowy atrybut należy określić:
Atrybut – utworzona wcześniej definicja atrybutu (należy wybrać z listy zdefiniowanych wcześniej atrybutów. Po wybraniu atrybutu część parametrów zostaje ustawiona zgodnie z definicją atrybutu.
Wartość – wartość atrybutu. Pole jest dostępne tylko w przypadku, gdy atrybut nie jest zależny od kontrahenta. W takim przypadku wartość parametru dla tego towaru jest dla wszystkich kontrahentów taka sama.
W przypadku atrybutów typu lista, użytkownik może wybrać potrzebną wartość z rozwijanej listy. Uzupełnienie listy o nowe wartości jest możliwe tylko z poziomu definicji (formularza) atrybutu.
Zależny od kontrahenta – parametr decyduje o tym czy wartość atrybutu dla towaru jest zawsze taka sama (parametr odznaczony), czy dla każdego kontrahenta jest inna (parametr zaznaczony).
W przypadku, gdy parametr zależy od kontrahenta w tabeli poniżej istnieje możliwość ustalenia jego wartości dla poszczególnych kontrahentów. Przycisk Dodaj umożliwia dodawanie kolejnych kontrahentów oraz określonych dla nich wartości atrybutu (np. kod kontrahenta – dostawcy oraz kod towaru u tego dostawcy). Listę kontrahentów w kolumnie Podmiot można wywołać wciskając prawy przycisk myszy lub klawisz <TAB> w pustym polu.
Oprócz kontrahentów istnieje możliwość zdefiniowania atrybutu dla innych podmiotów (pracownik, wspólnik, urząd, bank…). Zmiana typu podmiotu jest możliwa po wybraniu potrzebnej opcji z menu wyświetlanego pod przyciskiem strzałki (obok Dodaj ).
W przypadku atrybutu typu binaria użytkownik nie ma możliwości określenia parametrów związanych z przenoszeniem atrybutu na transakcje, natomiast pojawia się opcja związana z powiązaniem z daną binarną. Daną binarną może być na przykład plik zawierający zdjęcie produktu, dodatkową grafikę itp. Po wskazaniu danej poniżej widoczny jest podgląd pliku.
Po dodaniu atrybutu binarnego, wskazany plik jest dodawany do karty towaru jako załącznik.
Lista danych binarnych jest wspólna dla całego cennika. Po wciśnięciu przycisku wyświetlana jest lista wszystkich danych binarnych, jakie zostały wprowadzone do programu. Lista jest obsługiwana przez standardowe przyciski Dodaj, Usuń, Podgląd . Na podglądzie widoczny jest plik, który został zapamiętany z programie jako dana binarna.
Podczas dodawania nowej danej użytkownik musi podać nazwę, pod jaką dana binarna będzie widoczna w programie oraz wskazać plik zewnętrzny, który zostanie zaczytany do programu jako dana. Po wciśnięciu przycisku użytkownik może wskazać plik zapisany wcześniej na dysku komputera (dla ułatwienia podczas przeglądania katalogów lista wyświetlanych plików może być zawężona do określonego typu: JPG, bmp, gif itp.
Parametry dotyczące sposobu przenoszenia na dokumenty oraz udostępniania w e-Sklep są dziedziczone z definicji atrybutu, jednak użytkownik może je zmieniać indywidualnie dla każdego towaru.
Uwaga
Konfiguracja Comarch e-Sklep jest dostępna w modułach Handel , Handel Plus .
Kopiowanie atrybutów towaru w pole Opis Za kopiowania atrybutu w pole Opis odpowiadają parametry:
Dokleić do opisu elementu :
jeśli parametr jest zaznaczony – podczas wpisywania towaru na dokument w pole Opis na formularzu pozycji automatycznie kopiowana jest ustalona dla tego towaru wartość parametru. jeśli parametr jest odznaczony – atrybut jest widoczny jedynie na karcie towaru, natomiast nie jest kopiowany w pole Opis podczas wpisywania towaru na dokument. Kod atrybutu przed wartością – parametr jest dostępny tylko w przypadku, gdy zaznaczono wcześniej parametr Dokleić do opisu elementu . Odpowiada za oznaczenie parametru podczas kopiowania go w pole Opis :
jeśli parametr jest zaznaczony – podczas kopiowania atrybutu na dokument równocześnie kopiowany jest jego kod (np. KOD DOSTAWCY RO333/2008) jeśli parametr jest odznaczony – na dokument kopiowana jest jedynie wartość parametru bez jego dokładniejszego oznaczenia (w powyższym przykładzie jedynie RO333/2008)Oprócz atrybutów towar może posiadać jeszcze opis wpisany bezpośrednio na formularzu towaru (zakładka [Dodatkowe] ). Jeśli równocześnie zaznaczony jest parametr Kopiuj opis na fakturę – na pozycję dokumentu przepisywany jest w pierwszej kolejności opis (w całości), a dopiero potem poszczególne atrybuty (tylko te z zaznaczonym parametrem Dokleić opis na element ).
Podczas kopiowania atrybuty są sortowane wg kodów atrybutów – oznacza to, że w przypadku, gdy do jednego towaru był kilka razy przypisany ten sam atrybut z różnymi wartościami, to podczas przepisywania atrybutów towaru na dokumencie będą one ustawione obok siebie.
Ponadto na dokumencie istnieje możliwość dodatkowego wyboru atrybutów spośród tych kopiowanych na dokument. Jeśli na karcie towaru zaznaczono parametr Pozwól na edycję opisu na dokumencie obok pola zawierającego opis pojawia się przycisk . Po jego wciśnięciu użytkownik na liście atrybutów przypisanych do danego towaru może wybrać te, które zostaną przepisane na dokument.
Kopiowanie atrybutów towaru na element Atrybuty, które będą miały zaznaczony parametr Przenosić na transakcję zostaną przepisane na dodatkową zakładkę [Atrybuty] , która jest widoczna po podejrzeniu formularza pozycji na dokumencie.
Lista atrybutów może być modyfikowana przez użytkownika – może on nie tylko zmieniać wartość atrybutu, ale również dodawać nowe atrybuty. Lista wszystkich zdefiniowanych atrybutów jest dostępna po wciśnięciu przycisku określającego atrybut.
W trakcie kopiowania dokumentów, przekształcania (wszelkiego rodzaju konwersje) oraz ich korygowania – wraz z towarem na nowe dokumenty przenoszone są wszystkie przypisane dla poszczególnych pozycji atrybuty wraz z wartościami.
Z kopiowaniem atrybutów na pozycję związany jest również parametr Drukować na dokumencie . Jeśli parametr jest zaznaczony to dany atrybut wraz z wartością są drukowane na dokumentach. Na potrzeby wydruku Faktury Sprzedaży z atrybutami zdefiniowany jest odrębny wydruk Faktura VAT/ Atrybuty . Warto również pamiętać, że decydujące jest ustawienie tego parametru na karcie danego towaru, nie zaś na definicji atrybutu.
Przypisanie załącznika do towaru Atrybuty binarne a załączniki Import z innej bazy danych Import cennika z innej bazy danych (menu Narzędzia/ Importy ) umożliwia przeniesienie załączników przypisanych do towarów. Przy imporcie samego cennika przesyłane są tylko te dane, które są powiązane z towarami.
Na oknie importu danych z innej bazy znajduje się opcja Dane binarne (cennik, grupy towarów). Import danych binarnych umożliwia przeniesienia listy danych binarnych niepowiązanych bezpośrednio z kartą towaru czy grupą towarową.
Przy imporcie sprawdzana jest duplikacja, czy danych nie ma już w bazie.
Wyświetlanie załączników i atrybutów binarnych Z poziomu listy cennikowej dostępnej w menu Ogólne/Cennik oraz Handel/Zasoby (dla modułów Handel , Handel Plus ) istnieje możliwość podglądu wszystkich atrybutów binarnych oraz załączników przypisanych do poszczególnych pozycji cennikowych.
Kolumna Załączniki
Klikając prawym przyciskiem myszy w nagłówek jakiejkolwiek kolumny na liście pozycji cennikowych, po wskazaniu opcji Wybór kolumn , można wybrać dodatkową kolumnę o nazwie Załączniki .
W kolumnie wyświetlona zostanie nazwa załącznika (lub atrybutu binarnego). Po ustawieniu kursora na nazwie wyświetli się okno podglądu obrazów i plików z wszystkimi załącznikami przypisanymi do tego towaru.
Okno podglądu obrazów i plików
W oknie podglądu, pliki graficzne widoczne są jako miniatury, natomiast pozostałe pliki zobrazowane są przez symbol prezentujący typ pliku.
Okno podglądu obrazów i plików Pod poszczególnymi pozycjami widoczne są nazwy plików. Po kliknięciu na konkretny plik zostanie on otworzony w domyślnym programie.
Okno podglądu obrazów i plików można dowolnie powiększać/ zmniejszać poprzez chwycenie rogu okna lewym klawiszem myszy. Można również sterować wielkością miniatur poprzez suwak umieszczony pod listą plików.
Podgląd załączników, które są linkami do plików
Wyświetlanie plików podpiętych, jako linki działa analogicznie jak dla plików umieszczonych w bazie danych, przy czym wyświetlany plik musi znajdować się na dysku. Jeśli program nie odnajdzie pliku we wskazanej lokalizacji, wówczas wyświetli informację Nie znaleziono pliku.
Czy ten artykuł był pomocny? Ta przeglądarka nie jest już obsługiwana.
Przejdź na przeglądarkę Microsoft Edge, aby korzystać z najnowszych funkcji, aktualizacji zabezpieczeń i pomocy technicznej.
Artykuł 09/23/2022 Czas czytania: 20 min W tym artykule Autor: Scott Mitchell
Pobierz plik PDF
Chociaż lista DataList nie zawiera wbudowanych funkcji edytowania i usuwania, w tym samouczku zobaczymy, jak utworzyć listę danych, która obsługuje edytowanie i usuwanie jego danych bazowych.
Wprowadzenie W samouczku Omówienie wstawiania, aktualizowania i usuwania danych przyjrzeliśmy się sposobom wstawiania, aktualizowania i usuwania danych przy użyciu architektury aplikacji, obiektu ObjectDataSource oraz kontrolek GridView, DetailsView i FormView. W przypadku obiektu ObjectDataSource i tych trzech kontrolek sieci Web danych implementowanie prostych interfejsów modyfikacji danych było przystawką i dotyczyło jedynie zaznaczenia pola wyboru z tagu inteligentnego. Nie trzeba pisać kodu.
Niestety lista DataList nie ma wbudowanych funkcji edytowania i usuwania związanych z kontrolką GridView. Ta brakująca funkcja jest częściowo spowodowana faktem, że dataList jest reliktem z poprzedniej wersji ASP. NET, gdy deklaratywne kontrolki źródła danych i strony modyfikacji danych bez kodu były niedostępne. Chociaż lista DataList w wersji ASP. NET 2. 0 nie oferuje tych samych możliwości modyfikacji danych poza ramą co gridView, możemy użyć ASP. NET 1. x technik, aby uwzględnić takie funkcje. Takie podejście wymaga nieco kodu, ale jak zobaczymy w tym samouczku, lista DataList zawiera pewne zdarzenia i właściwości, aby pomóc w tym procesie.
W tym samouczku zobaczymy, jak utworzyć listę danych, która obsługuje edytowanie i usuwanie danych bazowych. Przyszłe samouczki przeanalizują bardziej zaawansowane scenariusze edytowania i usuwania, w tym walidację pola wejściowego, bezproblemową obsługę wyjątków zgłoszonych z warstwy dostępu do danych lub logiki biznesowej itd.
Uwaga
Podobnie jak w przypadku kontrolki DataList, kontrolka Repeater nie ma gotowej funkcjonalności do wstawiania, aktualizowania lub usuwania. Chociaż takie funkcje można dodać, lista DataList zawiera właściwości i zdarzenia, które nie można znaleźć w repeaterze, które upraszczają dodawanie takich możliwości. W związku z tym ten samouczek i przyszłe, które przyglądają się edytowaniu i usuwaniu, skupią się ściśle na liście danych.
Krok 1. Tworzenie i usuwanie stron internetowych edycji i usuwania Zanim zaczniemy eksplorować sposób aktualizowania i usuwania danych z listy DataList, najpierw utwórzmy strony ASP. NET w naszym projekcie witryny internetowej, których będziemy potrzebować w tym samouczku i kilku następnych. Zacznij od dodania nowego folderu o nazwie EditDeleteDataList
. Następnie dodaj do tego folderu następujące strony ASP. NET, aby skojarzyć każdą stronę ze stroną wzorcową Site. master
:
Default. aspx
Basics. aspx
BatchUpdate. aspx
ErrorHandling. aspx
UIValidation. aspx
CustomizedUI. aspx
OptimisticConcurrency. aspx
ConfirmationOnDelete. aspx
UserLevelAccess. aspx
Rysunek 1 . Dodawanie stron ASP. NET dla samouczków
Podobnie jak w innych folderach, Default. aspx
w folderze EditDeleteDataList
znajduje się lista samouczków w swojej sekcji. Pamiętaj, że kontrolka SectionLevelTutorialListing. ascx
użytkownika zapewnia tę funkcję. W związku z tym dodaj tę kontrolkę Default. aspx
użytkownika, przeciągając ją z Eksplorator rozwiązań do widoku projektu strony.
Rysunek 2 . Dodawanie kontrolki SectionLevelTutorialListing. ascx
użytkownika do Default. aspx
(kliknij, aby wyświetlić obraz pełnowymiarowy)
Na koniec dodaj strony jako wpisy do Web. sitemap
pliku. W szczególności dodaj następujące znaczniki po raportach wzorca/szczegółów za pomocą elementu DataList i Repeater <siteMapNode>
:
<siteMapNodetitle="Editing and Deleting with the DataList"description="Samples of Reports that Provide Editing and Deleting Capabilities"url="~/EditDeleteDataList/Default. aspx" ><siteMapNodetitle="Basics"description="Examines the basics of editing and deleting with theDataList control. "url="~/EditDeleteDataList/Basics. aspx" />title="Batch Update"description="Examines how to update multiple records at once in afully-editable DataList. "url="~/EditDeleteDataList/BatchUpdate. aspx" />title="Error Handling"description="Learn how to gracefully handle exceptions raised during thedata modification workflow. "url="~/EditDeleteDataList/ErrorHandling. aspx" />title="Adding Data Entry Validation"description="Help prevent data entry errors by providing validation. "url="~/EditDeleteDataList/UIValidation. aspx" />title="Customize the User Interface"description="Customize the editing user interfaces. "url="~/EditDeleteDataList/CustomizedUI. aspx" />title="Optimistic Concurrency"description="Learn how to help prevent simultaneous users fromoverwritting one another s changes. "url="~/EditDeleteDataList/OptimisticConcurrency. aspx" />title="Confirm On Delete"description="Prompt a user for confirmation when deleting a record. "url="~/EditDeleteDataList/ConfirmationOnDelete. aspx" />title="Limit Capabilities Based on User"description="Learn how to limit the data modification functionalitybased on the user s role or permissions. "url="~/EditDeleteDataList/UserLevelAccess. aspx" /></siteMapNode>
Po zaktualizowaniu Web. sitemap
programu poświęć chwilę, aby wyświetlić witrynę internetową samouczków za pośrednictwem przeglądarki. Menu po lewej stronie zawiera teraz elementy do edytowania i usuwania samouczków DataList.
Rysunek 3 . Mapa witryny zawiera teraz wpisy dotyczące edytowania i usuwania samouczków dotyczących listy danych
Krok 2. Badanie technik aktualizowania i usuwania danych Edytowanie i usuwanie danych za pomocą kontrolki GridView jest tak proste, ponieważ pod okładkami praca gridView i ObjectDataSource na koncercie. Zgodnie z opisem w samouczku Badanie zdarzeń skojarzonych z wstawianiem, aktualizowaniem i usuwaniem, po kliknięciu przycisku Aktualizacja wiersza element GridView automatycznie przypisuje swoje pola, które używały dwukierunkowego powiązania danych do UpdateParameters
kolekcji obiektu ObjectDataSource, a następnie wywołuje tę metodę ObjectDataSource Update()
.
Niestety lista DataList nie zapewnia żadnej z tych wbudowanych funkcji. Jest to nasza odpowiedzialność za zapewnienie, że wartości użytkownika są przypisane do parametrów objectDataSource i że jest wywoływana jego Update()
metoda. Aby pomóc nam w tym przedsięwzięciu, lista DataList udostępnia następujące właściwości i zdarzenia:
WłaściwośćDataKeyField
podczas aktualizowania lub usuwania musi być w stanie jednoznacznie zidentyfikować każdy element na liście danych. Ustaw tę właściwość na pole klucza podstawowego wyświetlanych danych. Spowoduje to wypełnienie kolekcji DataList DataKeys
określoną DataKeyField
wartością dla każdego elementu DataList. Zdarzenie EditCommand
jest uruchamiane, gdy jest kliknięty przycisk, LinkButton lub ImageButton, którego CommandName
właściwość jest ustawiona na Edytuj. cancelcommand. aspx" data-linktype="external">CancelCommand
jest uruchamiane, gdy zostanie kliknięty przycisk, LinkButton lub ImageButton, którego CommandName
właściwość ma wartość Anuluj. ZdarzenieUpdateCommand
jest uruchamiane, gdy zostanie kliknięty przycisk, LinkButton lub ImageButton, którego CommandName
właściwość ma wartość Aktualizuj. deletecommand. aspx" data-linktype="external">DeleteCommand
jest uruchamiane, gdy zostanie kliknięty przycisk, LinkButton lub ImageButton, którego CommandName
właściwość jest ustawiona na Usuń. Za pomocą tych właściwości i zdarzeń można użyć czterech metod aktualizowania i usuwania danych z listy DanychList:
Za pomocą ASP. x techniki lista danych istniała przed ASP. 0 i ObjectDataSources oraz mogła aktualizować i usuwać dane całkowicie za pomocą środków programistycznych. Ta technika powoduje całkowite usunięcie źródła danych ObjectDataSource i wymaga powiązania danych z listą DataList bezpośrednio z warstwy logiki biznesowej, zarówno podczas pobierania danych do wyświetlenia, jak i podczas aktualizowania lub usuwania rekordu. Używanie kontrolki Single ObjectDataSource na stronie do wybierania, aktualizowania i usuwania, podczas gdy lista DataList nie ma wbudowanej funkcji edytowania i usuwania elementu GridView, nie ma powodu, dla którego nie możemy dodać ich do siebie. W tym podejściu używamy obiektu ObjectDataSource tak jak w przykładach GridView, ale należy utworzyć procedurę obsługi zdarzeń dla zdarzenia DataList UpdateCommand
, w którym ustawiliśmy parametry objectDataSource i wywołamy jego Update()
metodę. Używanie kontrolki ObjectDataSource do wybierania, ale aktualizowanie i usuwanie bezpośrednio względem biblioteki BLL w przypadku używania opcji 2, musimy napisać bit kodu w UpdateCommand
zdarzeniu, przypisując wartości parametrów itd. Zamiast tego możemy trzymać się używania obiektu ObjectDataSource do wybierania, ale aktualizować i usuwać wywołania bezpośrednio względem biblioteki BLL (na przykład z opcją 1). Moim zdaniem aktualizowanie danych przez połączenie bezpośrednio z usługą BLL prowadzi do bardziej czytelnego kodu niż przypisywanie obiektu ObjectDataSource i UpdateParameters
wywoływanie jego Update()
metody. Użycie metody deklaratywnej za pośrednictwem wielu obiektówDataSources w poprzednich trzech podejściach wymaga nieco kodu. Jeśli wolisz używać jak największej ilości składni deklaratywnej, ostateczną opcją jest dołączenie wielu obiektów ObjectDataSources na stronie. Pierwsze źródło ObjectDataSource pobiera dane z usługi BLL i wiąże je z listą danych. Do aktualizowania jest dodawany inny obiekt ObjectDataSource, ale dodawany bezpośrednio w elemecie DataList s EditItemTemplate
. Aby uwzględnić obsługę usuwania, w obiekcie ItemTemplate
będzie potrzebna kolejna usługa ObjectDataSource. Dzięki temu podejściu te osadzone obiektyDataSource używają do ControlParameters
deklaratywnego powiązania parametrów ObjectDataSource z kontrolkami wejściowymi użytkownika (zamiast określać je programowo w procedurze obsługi zdarzeń usługi DataList UpdateCommand
). To podejście nadal wymaga nieco kodu, który musimy wywołać osadzony obiektDataSource s Update()
lub Delete()
polecenia, ale wymaga znacznie mniej niż w przypadku pozostałych trzech podejść. Minusem jest to, że wiele obiektów ObjectDataSources zaśmieca stronę, co uniemożliwia ogólną czytelność. Jeśli trzeba używać tylko jednego z tych podejść, wybieram opcję 1, ponieważ zapewnia ona największą elastyczność i dlatego, że lista DataList została pierwotnie zaprojektowana tak, aby pomieścić ten wzorzec. Chociaż lista DataList została rozszerzona o pracę z kontrolkami źródła danych ASP. 0, nie ma wszystkich punktów rozszerzalności ani funkcji oficjalnych kontrolek sieci Web ASP. 0 danych (GridView, DetailsView i FormView). Opcje od 2 do 4 nie są jednak bez zalet.
To i przyszłe edytowanie i usuwanie samouczków będzie używać obiektu ObjectDataSource do pobierania danych do wyświetlania i kierowania wywołań do usługi BLL w celu aktualizowania i usuwania danych (opcja 3).
Krok 3. Dodawanie listy danych i konfigurowanie jej obiektuDataSource W tym samouczku utworzymy listę danych zawierającą listę informacji o produkcie, a dla każdego produktu użytkownik będzie mieć możliwość edytowania nazwy i ceny oraz całkowitego usunięcia produktu. W szczególności pobierzemy rekordy do wyświetlenia przy użyciu obiektu ObjectDataSource, ale wykonamy akcje aktualizacji i usuwania, łącząc się bezpośrednio z usługą BLL. Zanim zaczniemy martwić się o zaimplementowanie funkcji edytowania i usuwania z listy danych, najpierw pobierzmy stronę, aby wyświetlić produkty w interfejsie tylko do odczytu. Ponieważ przeanalizowaliśmy te kroki w poprzednich samouczkach, omówię je szybko.
Zacznij od otwarcia Basics. aspx
strony w EditDeleteDataList
folderze i z widoku Projekt dodaj listę danych do strony. Następnie na podstawie tagu inteligentnego DataList utwórz nowy obiektDataSource. Ponieważ pracujemy z danymi produktu, skonfiguruj je do używania ProductsBLL
klasy. Aby pobrać wszystkie produkty, wybierz metodę GetProducts()
na karcie SELECT. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image6. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image7. png" alt="Konfigurowanie obiektu ObjectDataSource do używania klasy ProductsBLL" data-linktype="relative-path"/>
Rysunek 4 . Konfigurowanie obiektu ObjectDataSource do używania ProductsBLL
klasy (kliknij, aby wyświetlić obraz pełnowymiarowy)
Rysunek 5 . Zwracanie informacji o produkcie GetProducts()
przy użyciu metody (kliknij, aby wyświetlić obraz pełnowymiarowy)
Element DataList, taki jak GridView, nie jest przeznaczony do wstawiania nowych danych; w związku z tym wybierz opcję (Brak) z listy rozwijanej na karcie INSERT. Wybierz również (Brak) dla kart UPDATE i DELETE, ponieważ aktualizacje i usunięcia zostaną wykonane programowo za pośrednictwem usługi BLL. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image12. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image13. png" alt="Upewnij się, że listy Drop-Down w kartach INSERT, UPDATE i DELETE w obiekcie ObjectDataSource są ustawione na wartość (Brak)" data-linktype="relative-path"/>
Rysunek 6 . Upewnij się, że listy Drop-Down w kartach INSERT, UPDATE i DELETE obiektu ObjectDataSource są ustawione na (Brak) (Kliknij, aby wyświetlić obraz pełnowymiarowy)
Po skonfigurowaniu obiektu ObjectDataSource kliknij przycisk Zakończ, wracając do projektanta. Jak widzieliśmy w poprzednich przykładach, podczas kończenia konfiguracji objectDataSource program Visual Studio automatycznie tworzy obiekt ItemTemplate
dla listy DropDownList, wyświetlając każde z pól danych. Zastąp ten element ItemTemplate
tylko nazwą i ceną produktu. RepeatColumns
Ustaw również właściwość na 2.
Zgodnie z opisem w samouczku Omówienie wstawiania, aktualizowania i usuwania danych podczas modyfikowania danych przy użyciu obiektu ObjectDataSource nasza architektura wymaga usunięcia OldValuesParameterFormatString
właściwości z deklaratywnego znaczników ObjectDataSource (lub zresetowania jej do wartości domyślnej). {0}
Jednak w tym samouczku używamy obiektu ObjectDataSource tylko do pobierania danych. W związku z tym nie musimy modyfikować wartości właściwości ObjectDataSource OldValuesParameterFormatString
(chociaż nie jest to konieczne).
Po zastąpieniu domyślnej listy DataList ItemTemplate
dostosowanym znaczniki deklaratywne na stronie powinny wyglądać podobnie do następujących:
<asp:DataList ID="DataList1" runat="server" DataKeyField="ProductID"DataSourceID="ObjectDataSource1" RepeatColumns="2"><ItemTemplate><h5><asp:Label runat="server" ID="ProductNameLabel"Text='<%# Eval("ProductName")%>'></asp:Label></h5>Price: <asp:Label runat="server" ID="Label1"Text='<%# Eval("UnitPrice", "{0:C}")%>' /><br /></ItemTemplate></asp:DataList><asp:ObjectDataSource ID="ObjectDataSource1" runat="server"SelectMethod="GetProducts" TypeName="ProductsBLL"OldValuesParameterFormatString="original_{0}"></asp:ObjectDataSource>Poświęć chwilę, aby wyświetlić postęp w przeglądarce. Jak pokazano na rysunku 7, lista Danych Wyświetla nazwę produktu i cenę jednostkową dla każdego produktu w dwóch kolumnach. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image15. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image16. png" alt="Nazwy produktów i ceny są wyświetlane w Two-Column DataList" data-linktype="relative-path"/>
Rysunek 7 . Nazwy produktów i ceny są wyświetlane w Two-Column DataList (kliknij, aby wyświetlić obraz pełnowymiarowy)
Lista danych zawiera wiele właściwości wymaganych do procesu aktualizowania i usuwania, a te wartości są przechowywane w stanie widoku. W związku z tym podczas tworzenia listy DataList obsługującej edytowanie lub usuwanie danych niezbędne jest włączenie stanu widoku DataList.
Czytelnik astute może pamiętać, że mogliśmy wyłączyć stan widoku podczas tworzenia edytowalnych widoków GridView, DetailsViews i FormViews. Jest to spowodowane tym, że ASP. 0 Kontrolki sieci Web mogą obejmować stan kontroli , który jest stanem utrwalone w przypadku poświadczeń zwrotnych, takich jak stan widoku, ale uważany za niezbędny.
Wyłączenie stanu widoku w elemecie GridView pomija jedynie informacje o stanie trywialnym, ale zachowuje stan kontroli (w tym stan niezbędny do edycji i usuwania). Lista danych utworzona w przedziale czasu ASP. x nie korzysta ze stanu kontrolki i dlatego musi mieć włączony stan widoku. Zobacz Stan kontroli a Stan widoku, aby uzyskać więcej informacji na temat celu stanu kontroli i różnic między stanem widoku.
Krok 4. Dodawanie interfejsu użytkownika do edycji Kontrolka GridView składa się z kolekcji pól (BoundFields, CheckBoxFields, TemplateFields itd. ). Te pola mogą dostosować renderowane znaczniki w zależności od ich trybu. Na przykład w trybie tylko do odczytu pole BoundField wyświetla wartość pola danych jako tekst; w trybie edycji renderuje kontrolkę sieci Web TextBox, której Text
właściwość ma przypisaną wartość pola danych.
Z drugiej strony lista danych renderuje swoje elementy przy użyciu szablonów. Elementy tylko do odczytu są renderowane przy użyciu ItemTemplate
elementów w trybie edycji za pośrednictwem elementu EditItemTemplate
. Na tym etapie nasza lista danych ma tylko wartość ItemTemplate
. Aby obsługiwać funkcje edycji na poziomie elementu, należy dodać znacznik EditItemTemplate
zawierający znaczniki, które mają być wyświetlane dla edytowalnego elementu. W tym samouczku użyjemy kontrolek sieci Web TextBox do edytowania nazwy produktu i ceny jednostkowej.
EditItemTemplate
Można je utworzyć deklaratywnie lub za pomocą projektanta (wybierając opcję Edytuj szablony z tagu inteligentnego DataList). Aby użyć opcji Edytuj szablony, najpierw kliknij link Edytuj szablony w tagu inteligentnym, a następnie wybierz EditItemTemplate
element z listy rozwijanej. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image18. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image19. png" alt="Zdecyduj się na pracę z listą danych EditItemTemplate" data-linktype="relative-path"/>
Rysunek 8 . Rezygnacja z pracy z listą EditItemTemplate
danych (kliknij, aby wyświetlić obraz pełnowymiarowy)
Następnie wpisz w polu Nazwa produktu: i Cena: a następnie przeciągnij dwie kontrolki TextBox z przybornika do interfejsu EditItemTemplate
w Projektancie. Ustaw właściwości TextBoxes ID
na ProductName
i UnitPrice
. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image21. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image22. png" alt="Dodawanie pola tekstowego dla nazwy i ceny produktu" data-linktype="relative-path"/>
Rysunek 9 . Dodawanie pola TextBox dla nazwy i ceny produktu (kliknij, aby wyświetlić obraz pełnowymiarowy)
Musimy powiązać odpowiednie wartości pola danych produktu z Text
właściwościami dwóch pól TextBoxes. W tagach inteligentnych TextBoxes kliknij link Edytuj daneBindings, a następnie skojarz odpowiednie pole danych z właściwością, jak pokazano na rysunku Text
10.
Po powiązaniu pola danych z UnitPrice
polem TextBox Text
ceny można go sformatować jako wartość waluty (), liczbę ogólną ({0:C}
{0:N}
) lub pozostawić niesformatowaną. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image24. png" alt="Powiąż pola danych ProductName i UnitPrice z właściwościami tekstu pól TextBoxes" data-linktype="relative-path"/>
Rysunek 10 . Powiązanie ProductName
pól danych i UnitPrice
z Text
właściwościami pól tekstowych
Zwróć uwagę, że okno dialogowe Edytowanie elementów DataBindings na rysunku 10 nie zawiera pola wyboru Dwukierunkowe powiązanie danych, które jest obecne podczas edytowania pola szablonu w elemecie GridView lub DetailsView lub szablonu w widoku FormView. Dwukierunkowa funkcja łączenia danych pozwoliła na automatyczne przypisanie wartości do wejściowej kontrolki sieci Web do odpowiedniego obiektu ObjectDataSource lub InsertParameters
UpdateParameters
podczas wstawiania lub aktualizowania danych. Tabela DataList nie obsługuje dwukierunkowego łączenia danych, ponieważ zobaczymy w dalszej części tego samouczka, po wprowadzeniu zmian przez użytkownika i dokonaniu aktualizacji danych musimy programowo uzyskać dostęp do tych właściwości TextBoxes Text
i przekazać ich wartości do odpowiedniej UpdateProduct
metody w ProductsBLL
klasie.
Na koniec musimy dodać przyciski Aktualizuj i Anuluj do elementu EditItemTemplate
. Jak pokazano w samouczku Master/Detail Using a Bulleted List of Master Records with a Details DataList tutorial ( Samouczek Szczegóły dataList), gdy zostanie kliknięty przycisk, LinkButton lub ImageButton, którego CommandName
właściwość jest ustawiona, zostanie kliknięty z poziomu elementu Repeater lub DataList, zostanie zgłoszone zdarzenie Repeater lub DataList ItemCommand
. W przypadku elementu DataList, jeśli CommandName
właściwość jest ustawiona na określoną wartość, może zostać również zgłoszone dodatkowe zdarzenie. Wartości właściwości specjalnych CommandName
obejmują między innymi:
Anulowanie zgłasza CancelCommand
zdarzenie Edycja zgłasza EditCommand
zdarzenie Aktualizacja zgłasza UpdateCommand
zdarzenie Pamiętaj, że te zdarzenia są zgłaszane oprócz ItemCommand
zdarzenia.
Dodaj do EditItemTemplate
dwóch kontrolek sieci Web przycisków, których CommandName
ustawiono wartość Aktualizuj, a drugi na Anuluj. Po dodaniu tych dwóch kontrolek sieci Web przycisk projektant powinien wyglądać podobnie do następującego:
Rysunek 11 . Dodawanie przycisków Aktualizuj i Anuluj do elementu EditItemTemplate
(Kliknij, aby wyświetlić obraz pełnowymiarowy)
Po zakończeniu EditItemTemplate
znaczników deklaratywnych dataList powinien wyglądać podobnie do następującego:
Text='<%# Eval("ProductName")%>' /><EditItemTemplate>Product name:<asp:TextBox ID="ProductName" runat="server"Text='<%# Eval("ProductName")%>' /><br />Price:<asp:TextBox ID="UnitPrice" runat="server"Text='<%# Eval("UnitPrice", "{0:C}")%>' /><br /><asp:Button ID="UpdateProduct" runat="server"CommandName="Update" Text="Update" /><asp:Button ID="CancelUpdate" runat="server"CommandName="Cancel" Text="Cancel" /></EditItemTemplate>
Krok 5. Dodawanie hydrauliki do trybu edycji W tym momencie nasza lista danych ma interfejs edycji zdefiniowany za pośrednictwem interfejsu EditItemTemplate
; jednak obecnie nie ma możliwości, aby użytkownik odwiedzający naszą stronę wskazywał, że chce edytować informacje o produkcie. Musimy dodać przycisk Edytuj do każdego produktu, który po kliknięciu powoduje renderowanie elementu DataList w trybie edycji. Zacznij od dodania przycisku Edytuj do elementu ItemTemplate
, za pomocą projektanta lub deklaratywnego. Pamiętaj, aby ustawić właściwość Edytuj przycisk s CommandName
na Edytuj.
Po dodaniu tego przycisku Edytuj poświęć chwilę, aby wyświetlić stronę za pośrednictwem przeglądarki. Po dodaniu każda lista produktów powinna zawierać przycisk Edytuj. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image28. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image29. png" alt="Zrzut ekranu przedstawiający kartę DataList EditItemTemplate z dodanym przyciskiem Edytuj. " data-linktype="relative-path"/>
Rysunek 12 . com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image30. png" data-linktype="relative-path">Kliknij, aby wyświetlić obraz pełnowymiarowy)
Kliknięcie przycisku powoduje powrót, ale nie powoduje przełączenia listy produktów do trybu edycji. Aby można było edytować produkt, musimy:
Ustaw właściwość DataList EditItemIndex
na indeks, którego DataListItem
przycisk Edytuj został właśnie kliknięty. Ponowne powiązanie danych z listą danych. Gdy lista DataList zostanie ponownie renderowana, DataListItem
element, którego ItemIndex
odpowiada elementowi DataList s EditItemIndex
, zostanie renderowany przy użyciu elementu EditItemTemplate
. Ponieważ zdarzenie DataList EditCommand
jest wyzwalane po kliknięciu przycisku Edytuj, utwórz procedurę EditCommand
obsługi zdarzeń z następującym kodem:
Protected Sub DataList1_EditCommand(source As Object, e As DataListCommandEventArgs) _Handles DataList1. EditCommand' Set the DataList's EditItemIndex property to the' index of the DataListItem that was clickedDataList1. EditItemIndex = e. Item. ItemIndex' Rebind the data to the DataListDataList1. DataBind()End SubProcedura EditCommand
obsługi zdarzeń jest przekazywana w obiekcie typu DataListCommandEventArgs
jako drugi parametr wejściowy, który zawiera odwołanie do DataListItem
którego kliknięto przycisk Edytuj (e. Item
). Procedura obsługi zdarzeń najpierw ustawia element DataList na EditItemIndex
ItemIndex
element edytowalny DataListItem
, a następnie ponownie tworzy powiązanie danych z listą DataList przez wywołanie metody DataList DataBind()
.
Po dodaniu tej procedury obsługi zdarzeń ponownie przejdź do strony w przeglądarce. Kliknięcie przycisku Edytuj powoduje teraz edytowanie klikniętego produktu (zobacz Rysunek 13). com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image31. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image32. png" alt="Kliknięcie przycisku Edytuj powoduje, że produkt można edytować" data-linktype="relative-path"/>
Rysunek 13 . Kliknięcie przycisku Edytuj powoduje, że produkt można edytować (kliknij, aby wyświetlić obraz pełnowymiarowy)
Krok 6. Zapisywanie zmian użytkownika Kliknięcie edytowanych przycisków Aktualizuj lub Anuluj produktu nic nie robi w tym momencie; aby dodać tę funkcję, musimy utworzyć programy obsługi zdarzeń dla zdarzeń i CancelCommand
zdarzeń DataListUpdateCommand
. Zacznij od utworzenia procedury obsługi zdarzeń, która będzie wykonywana po kliknięciu CancelCommand
przycisku Anuluj edytowanego produktu i zadaniu zwrócenia listy danych do stanu przed edycją.
Aby lista DataList renderować wszystkie jego elementy w trybie tylko do odczytu, musimy wykonać następujące czynności:
Ustaw właściwość DataList EditItemIndex
na indeks nieistniejącego DataListItem
indeksu. -1
jest bezpiecznym wyborem, ponieważ DataListItem
indeksy zaczynają się od 0
. Ponieważ żaden element nie DataListItem
ItemIndex
odpowiada listom EditItemIndex
danych, cała lista danych zostanie renderowana w trybie tylko do odczytu. Te kroki można wykonać za pomocą następującego kodu procedury obsługi zdarzeń:
Protected Sub DataList1_CancelCommand(source As Object, e As DataListCommandEventArgs) _Handles DataList1. CancelCommand' Set the DataList's EditItemIndex property to -1DataList1. EditItemIndex = -1Po dodaniu kliknij przycisk Anuluj zwraca wartość DataList do stanu wstępnego edytowania.
Ostatni program obsługi zdarzeń, który musimy ukończyć, to UpdateCommand
procedura obsługi zdarzeń. Ten program obsługi zdarzeń musi:
Programowo uzyskaj dostęp do wprowadzonej przez użytkownika nazwy produktu i ceny, a także edytowanego produktu s ProductID
. Zainicjuj proces aktualizacji, wywołując odpowiednie UpdateProduct
przeciążenie w ProductsBLL
klasie. Kroki 1 i 2 są odpowiedzialne za zapisywanie zmian użytkownika; kroki 3 i 4 zwracają listę Danych Do stanu wstępnej edycji po zapisaniu zmian i są identyczne z krokami wykonywanymi w procedurze CancelCommand
obsługi zdarzeń.
Aby uzyskać zaktualizowaną nazwę i cenę produktu, musimy użyć FindControl
metody, aby programowo odwoływać się do kontrolek sieci Web TextBox w programie EditItemTemplate
. Musimy również uzyskać edytowaną wartość produktu ProductID
. Po początkowym powiązaniu obiektu ObjectDataSource z listą danych program Visual Studio przypisał właściwość DataList DataKeyField
do wartości klucza podstawowego ze źródła danych (ProductID
). Tę wartość można następnie pobrać z kolekcji DataList. DataKeys
Poświęć chwilę, aby upewnić się, że DataKeyField
właściwość jest rzeczywiście ustawiona na ProductID
.
Poniższy kod implementuje cztery kroki:
Protected Sub DataList1_UpdateCommand(source As Object, e As DataListCommandEventArgs) _Handles DataList1. UpdateCommand' Read in the ProductID from the DataKeys collectionDim productID As Integer = Convert. ToInt32(DataList1. DataKeys(e. ItemIndex))' Read in the product name and price valuesDim productName As TextBox = CType(e. FindControl("ProductName"), TextBox)Dim unitPrice As TextBox = CType(e. FindControl("UnitPrice"), TextBox)Dim productNameValue As String = NothingIf productName. Text. Trim(). Length > 0 ThenproductNameValue = productName. Trim()End IfDim unitPriceValue As Nullable(Of Decimal) = NothingIf unitPrice. Length > 0 ThenunitPriceValue = Decimal. Parse(unitPrice. Trim(), NumberStyles. Currency)' Call the ProductsBLL's UpdateProduct method...Dim productsAPI As New ProductsBLL()productsAPI. UpdateProduct(productNameValue, unitPriceValue, productID)' Revert the DataList back to its pre-editing stateProcedura obsługi zdarzeń rozpoczyna się od odczytania w edytowanych produktach ProductID
z DataKeys
kolekcji. Następnie dwa pola TextBoxes w obiekcie EditItemTemplate
są przywołyne i ich Text
właściwości przechowywane w zmiennych productNameValue
lokalnych i unitPriceValue
. Użyjemy Decimal. Parse()
metody, aby odczytać wartość z UnitPrice
pola TextBox, aby jeśli wprowadzona wartość ma symbol waluty, nadal można ją poprawnie przekonwertować na Decimal
wartość.
Wartości z ProductName
pól TextBoxes i UnitPrice
są przypisywane tylko do zmiennych productNameValue i unitPriceValue, jeśli właściwości TextBoxes Text mają określoną wartość. W przeciwnym razie jest używana wartość zmiennej Nothing
, która ma wpływ na aktualizowanie danych przy użyciu wartości bazy danych NULL
. Oznacza to, że nasz kod traktuje konwersje pustych ciągów na wartości bazy danych NULL
, co jest domyślnym zachowaniem interfejsu edycji w kontrolkach GridView, DetailsView i FormView.
Po odczytaniu wartości ProductsBLL
metoda klasy jest UpdateProduct
wywoływana, przekazując nazwę produktu, cenę i ProductID
. Procedura obsługi zdarzeń zostanie zakończona przez zwrócenie listy Danych Do stanu wstępnej edycji przy użyciu dokładnie takiej samej logiki, jak w programie obsługi zdarzeń CancelCommand
.
Po zakończeniu EditCommand
obsługi zdarzeń, CancelCommand
i UpdateCommand
odwiedzający może edytować nazwę i cenę produktu. Rysunek 14-16 przedstawia ten przepływ pracy edycji w akcji. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image34. com/pl-pl/aspnet/web-forms/overview/data-access/editing-and-deleting-data-through-the-datalist/an-overview-of-editing-and-deleting-data-in-the-datalist-vb/_static/image35. png" alt="Podczas pierwszej wizyty na stronie wszystkie produkty są w trybie Read-Only" data-linktype="relative-path"/>
Rysunek 14 . Podczas pierwszej wizyty na stronie wszystkie produkty są w trybie Read-Only (
Rysunek 15 . Aby zaktualizować nazwę produktu lub cenę, kliknij przycisk Edytuj (
Rysunek 16 . Po zmianie wartości kliknij przycisk Aktualizuj, aby powrócić do trybu Read-Only (kliknij, aby wyświetlić obraz pełnowymiarowy)
Krok 7. Dodawanie możliwości usuwania Kroki dodawania funkcji usuwania do listy danych są podobne do tych, które umożliwiają dodawanie możliwości edytowania. Krótko mówiąc, musimy dodać do tego przycisk Usuń po kliknięciu ItemTemplate
:
Odczytuje w odpowiednich produktach ProductID
za pośrednictwem kolekcji DataKeys
. Wykonuje usuwanie przez wywołanie ProductsBLL
metody s DeleteProduct
klasy. Umożliwia ponowne powiązanie danych z listą danych. Zacznijmy od dodania przycisku Usuń do elementu ItemTemplate
.
Po kliknięciu przycisku, którego CommandName
element to Edytuj, Aktualizuj lub Anuluj, zgłasza zdarzenie DataList ItemCommand
wraz z dodatkowym zdarzeniem (na przykład w przypadku użycia opcji Edytuj EditCommand
zdarzenie jest również zgłaszane). Podobnie dowolny przycisk, element LinkButton lub ImageButton w elemecie DataList, którego CommandName
właściwość jest ustawiona na Wartość Delete, powoduje, że DeleteCommand
zdarzenie zostanie wyzwolony (wraz z elementem ItemCommand
).
Dodaj przycisk Usuń obok przycisku Edytuj w elemecie ItemTemplate
, ustawiając jej CommandName
właściwość na Usuń. Po dodaniu tego przycisku kontrolka składni deklaratywnej dataList ItemTemplate
powinna wyglądać następująco:
<ItemTemplate><asp:Button runat="server" id="EditProduct" CommandName="Edit"Text="Edit" /><asp:Button runat="server" id="DeleteProduct" CommandName="Delete"Text="Delete" />Następnie utwórz procedurę obsługi zdarzeń dla zdarzenia DataList DeleteCommand
przy użyciu następującego kodu:
Protected Sub DataList1_DeleteCommand(source As Object, e As DataListCommandEventArgs) _Handles DataList1. DeleteCommand' Delete the dataproductsAPI. DeleteProduct(productID)Kliknięcie przycisku Usuń powoduje powrót i uruchomienie zdarzenia DataList. DeleteCommand
W procedurze obsługi zdarzeń klikniętą wartość produktu ProductID
jest uzyskiwana z kolekcji DataKeys
. Następnie produkt zostanie usunięty przez wywołanie ProductsBLL
metody s DeleteProduct
klasy.
Po usunięciu produktu ważne jest, aby ponownie połączyć dane z listy DataList (DataList1. DataBind()
), w przeciwnym razie lista DataList będzie nadal pokazywać produkt, który został właśnie usunięty.
Podsumowanie Chociaż lista DataList nie ma punktu i klika przycisk edytowania i usuwania obsługi, którą cieszy się funkcja GridView, z krótkim fragmentem kodu można go ulepszyć, aby uwzględnić te funkcje. W tym samouczku pokazano, jak utworzyć dwukolumna listę produktów, które można usunąć i których nazwy i ceny można edytować. Dodawanie obsługi edytowania i usuwania jest kwestią uwzględniania odpowiednich kontrolek sieci Web w systemach ItemTemplate
i EditItemTemplate
, tworząc odpowiednie procedury obsługi zdarzeń, odczytując wartości klucza wprowadzonego przez użytkownika i klucz podstawowy oraz łącząc się z warstwą logiki biznesowej.
Mimo że dodaliśmy podstawowe funkcje edytowania i usuwania do listy DataList, brakuje jej bardziej zaawansowanych funkcji. Na przykład nie ma weryfikacji pola wejściowego — jeśli użytkownik wprowadzi cenę Za drogie, wyjątek zostanie zgłoszony Decimal. Parse
podczas próby przekonwertowania zbyt drogie na Decimal
wartość. Podobnie, jeśli wystąpił problem podczas aktualizowania danych w warstwach logiki biznesowej lub dostępu do danych, użytkownik zostanie wyświetlony ze standardowym ekranem błędu. Bez jakiegokolwiek potwierdzenia na przycisku Usuń przypadkowo usunięcie produktu jest zbyt prawdopodobne.
W przyszłych samouczkach zobaczymy, jak poprawić środowisko edytowania użytkownika.
Szczęśliwe programowanie!
Informacje o autorze Scott Mitchell, autor siedmiu książek ASP/ASP. NET i założyciel 4GuysFromRolla. com, współpracuje z technologiami internetowymi firmy Microsoft od 1998 roku. Scott pracuje jako niezależny konsultant, trener i pisarz. Jego najnowsza książka to Sams Teach Yourself ASP. 0 w ciągu 24 godzin . Można do niego dotrzeć pod adresem mitchell@4GuysFromRolla. com. Lub za pośrednictwem swojego bloga, który można znaleźć na stronie http://ScottOnWriting. NET.
Specjalne podziękowania Ta seria samouczków została sprawdzona przez wielu pomocnych recenzentów. Recenzenci w tym samouczku byli Zack Jones, Ken Pespisa i Randy Schmidt. Chcesz przejrzeć nadchodzące artykuły MSDN? Jeśli tak, upuść mi wiersz pod adresem