Orezanie textu v GridView   zodpovězená otázka

ASP.NET WebForms

Prosím Vás potrebujem v GridView orezať text.

Neviem sa z toho vysomáriť, ako to zadať do DataTextFormatString. Potrebujem pri dlhom názve orezať na 5 písmen a pridať ... Našiel som všetky možné formáty dátumov a pod. no text nie.

Moc dík.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nehledáte místo ASP .NET řešení a formátovacích řetězců spíš CSS vlasntost text-overflow?

http://www.quirksmode.org/css/textoverfl...

http://www.w3schools.com/cssref/css3_pr_...

Konkrétně text-overflow: ellipsis.

Pokud ale bude text přetékat o značné množství znaků, vyplatí se ustřihnout nějaké bezpečné množství, které jen krátce přesahuje text, který se bude moci vyrenderovat a nechat oříznout pouze tenhle krátký text. Jinak budete zbytečně ke klientovi posílat slohy, ze kterých uvidí prvních pár písmen.

http://stackoverflow.com/questions/76507...

Zde je i Extension metoda pro oříznutí příliš dlouhého stringu, aby se ke klientovi neposílalo více, než je potřeba, jak jsem psal výše.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Ďakujem za typ. Musím si to riadne pozrieť. No skôr som mal na mysli, či to ide nejako jednoduchšie formátovať cez DataTextFormatString, ako keď napríklad chcete formátovať číslo {0:D8} a pod.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Formátovacím řetězcem můžete pouze zarovnat kratší string do delšího (vlevo či vpravo).

http://msdn.microsoft.com/en-us/library/...

V sekci Code Examples máte ukázku takového formátování řetězce.

Pokud byste chtěl ale delší string zkrátit, rovná se to ztrátě informace a je diskutabilní, nakolik by to bylo užitečné. U čísel sice také dochází ke ztrátě informace, ale formátování pro ně bylo implementováno takové, jaké je, protože se toho moc formátovat nedá. U řetězců by to bylo jiné, Vy můžete chtít zkrácení a přidání "…", ale stejně tak někdo může chtít, aby každé třetí písmeno bylo vzhůru nohama. Samozřejmě nemůžu mluvit za lidi, co stojí za vývojem .NET frameworku, ale nepočítal bych s tím, že formátovací řetězce se u stringů nějak extra rozšíří, protože je moc subjektivní, co by se ještě mělo dát formátovat přes formátovací řetězec a kdy nechat vývojáře, aby si napsali nějaký converter, který jim to naformátuje na míru.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Veľmi pekne ďakujem za vysvetlenie. Už tomu rozumiem. Skúsim to cestou text-overflow, ako ste mi radil. V GridView predávam iné hodnoty ako text z databáze z DataNavigateUrlField a v podstate potrebujem len orezať text, ktorý GridView zobrazuje do 1 riadku. Naivne som si myslel že to nejako orežem - niečo.substring(0,5) :-)

Ešte raz dík.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Bohužel, ASP .NET není má silná stránka, ale to, co jste nyní řekl, se nevylučuje. Nevím, jak to bude s bindingem, ale z tohoto příspěvku:

http://stackoverflow.com/a/7651192/15405...

Usuzuji, že místo <asp:BoundField lze použít <asp:TemplateField a v šabloně pak nastavíte text na ořezanou verzi: Text="<%# Eval("description").ToString().Shorten(20) %>". Kdy metoda Shorten je implementávana tak, jak popisuje daný příspěvěk, tedy jako následující Extension metoda:

public static string Shorten(this string name, int chars)
    {
        if (name.ToCharArray().Count() > chars)
        {
            return name.Substring(0, chars) + "...";
        }
        else return name;
    }

Což ve VB znamená něco jako

<System.Runtime.CompilerServices.Extension()>
Public Shared Function Shorten(text As String, length As Integer) As Sdtring
  If text.Length >= length Then Return text
  Return String.Format("{0}…", text.Substring(0, length))
End Function

Ale jak říkám, nevím, jak se tohle dá dohromady s data bindingem, ASP .NET je pro mě španělská vesnice.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Tak som na to s Vašou pomocou prišiel.

Natvrdo som zadefinoval


 Text='<%# Eval("Text2").Substring(0,20) %>'

A ono mi to zožralo a pekne orezalo.

Ešte raz Vám veľmi pekne ďakujem za správne nasmerovanie.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback