AjaxToolkit Multi-word AutoCompleteExtender
Tworząc dynamiczne strony, często z konieczności potrzebujemy użyć podpowiedzi dla użytkownika. Z pomocą przychodzi oczywiście standardowo AjaxControlToolkit z kontrolką AutoCompleteExtender. Jest to kontrolka, która pozwala na wykorzystanie w wielu scenariuszach. Najprostszym z nich jest wyświetlanie podpowiedzi do wpisanego słowa w postaci listy. A co jeżeli chcielibyśmy, aby nasz "podpowiadator" pomagał przy wpisywaniu każdego słowa osobno ? Otóż można skonfigurować ten komponent tak, żeby nam to ułatwił. Parametry kontrolki:
<ajaxToolkit:AutoCompleteExtender ID="aceTags" runat="server"
TargetControlID="tbTags"
ServiceMethod="GetCompletionList"
MinimumPrefixLength="2"
ServicePath="~/WS/Service.asmx"
CompletionInterval="400"
DelimiterCharacters=","
ShowOnlyCurrentWordInCompletionListItem="true" />
Krótkie objaśnienie:
ServiceMethod to nazwa metody w webserwisie, do którego się odwołujemy, a
ServicePath to ścieżka do tego webserwisu.
DelimiterCharacters określa jaki znak będzie oddzielał poszczególne elementy,
i wreszcie chyba najważniejsze to to, że ustawienie paramteru ShowOnlyCurrentWordInCompletionListItem na true powoduje, że podpowiadany jest tylko bieżący element z listy.
No i śmiga
A teraz kilka błędów:
1. Tworzony web service musi mieć atrybut [ScriptService].
2. Metoda sweb servicu musi być public string[] MojaMetoda (string prefixText, int count), (opcjonalnie można dodać jeszcze jeden parametr - można doczytać). Trzeba zwrócić uwagę, że metoda nie jest statyczna i dodatkowo nie można modyfikować nazwy jej parametrów wejściowych. Sysgnatura metody może być dowolna. Metodę taką trzeba dodatkowo zaopatrzyć w atrybut [ScriptMethod].
3. Jeżeli coś nie działa, sprawdź czy możesz się dobić do webservisu. Ścieżka wygląda na taką modłe http://localhost/WS/Service.asmx, gdzie oczywiście katalog i nazwa serwisu zależą od własnej implementacji. Jeżeli WS jest widoczny, to powinieneś móc sobie wywołać twoją metodę z przeglądarki.
4. Sprawdź czy dobrze się odwołujesz do odpowiedniego WS w kodzie kontrolki.
Dynamiczne usuwanie default constraint z tabeli
Dynamiczne usuwanie domyślnych wartości tabeli można zrealizować za pomocą poniższego kodu.
DECLARE @@cName NVARCHAR(100)
DECLARE @query NVARCHAR(100)
DECLARE @@counter INT
DECLARE DF_evoyage CURSOR SCROLL
FOR
SELECT NAME --, OBJECT_ID, PARENT_OBJECT_ID, TYPE, TYPE_DESC, PARENT_COLUMN_ID, DEFINITION
FROM SYS.DEFAULT_CONSTRAINTS
WHERE NAME LIKE '%_table_name_%'
OPEN DF_evoyage
FETCH FIRST FROM DF_table INTO @@cName
SET @@counter = 1
WHILE @@FETCH_STATUS = 0
BEGIN
SET @query = 'ALTER TABLE table_name DROP CONSTRAINT ' + @@cName;
PRINT CAST(CAST(@@counter AS NVARCHAR(10)) + ') EXECUTING ' + @query AS NVARCHAR(200))
EXEC sp_executesql @query
FETCH NEXT FROM DF_table INTO @@cName
SET @@counter = @@counter + 1
END
CLOSE DF_table
DEALLOCATE DF_table
Operacja przydaje się w przypadku kiedy np. trzeba dodać identity na kolumnie. Jedyna opcją jest wtedy (dajmy na to że operujemy na tabeli 'tab')
1. Usunięcie constraintów z tabeli tab
2. Utworzenie tabeli TMP_tab
3. Dodanie tych samych defaultów na tabeli TMP_tab
4. Skopiowanie danych z tabeli tab do tabeli TMP_tab
5. Usunięcie tabeli tab
6. Zmiana nazwy tabeli z TMP_tab na tab
7. Dodanie pozostałych constraintów do tabeli tab.
FINITO.