Formát čísla (BIN, HEX, DEC)   otázka

VB.NET

Formát ve sloupci s daty typu byte v datagridview :

dgv.Columns(0).DefaultCellStyle.Format = "X2"

Např. 255 se zobrazí jako FF , hexadecimálně.

Co použít pro binární formátování na 11111111 ?

Formát by měl vracet vlastně totéž jako:

result = Convert.ToString(255, 2).PadLeft(8, "0"c)

Existuje taky nějaký předdefinovaný formát?

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

Zdravím,

obávám se, že v defaultu takový formát není. Nicméně se nabízí implementace vlastního formatteru rozšířeného o podporu binárního formátu, viz

https://msdn.microsoft.com/cs-cz/library...

a pokud to jde (nejsem si jistý, už s tím nějakou dobu nepracuji) nějak donutit GridView aby použil tento formatter. Pokud to nejde, nezbývá Vám nic jiného než chytit event formátování buňky (DataGridView.CellFormatting) a zformátovat dle gusta.

R.

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

Zdravím,

asi umí, ale nemám ověřené.

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

R.

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

Díky moc, jen vnutit datagridview custom formatter...

(BinaryFormatter použit z příkladu viz. link výše)

Vypadalo, že bude stačit :

With dgv
    .Columns(0).DefaultCellStyle.FormatProvider = New BinaryFormatter()
    .Columns(0).DefaultCellStyle.Format = "B" ' B or H or O
End With

Bohužel vlastní formát byl tvrdošíjně odmítán...

Původní snahou bylo se zcela vyhnout události DataGridView.CellFormatting,

ale bohužel bez ní nefunguje ani custom formatter.

Řešení nalezeno zde:

http://stackoverflow.com/questions/35515...

Pak v prvku poděděném z datagridview (vb.net):

Protected Overrides Sub OnCellFormatting(ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs)
    If TypeOf e.CellStyle.FormatProvider Is ICustomFormatter Then
        e.Value = TryCast(e.CellStyle.FormatProvider.GetFormat( _
            GetType(ICustomFormatter)), ICustomFormatter).Format( _
            e.CellStyle.Format, e.Value, e.CellStyle.FormatProvider)
        e.FormattingApplied = True
    End If
    MyBase.OnCellFormatting(e)
End Sub

Nebo prostě dle gusta, příklad :

Protected Overrides Sub OnCellFormatting(ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs)
    If e.ColumnIndex = 0 Then
        e.Value = Convert.ToString(CByte(e.Value), 2).PadLeft(8, "0"c)
        e.FormattingApplied = True
    End If
    MyBase.OnCellFormatting(e)
End Sub

Smiřuji se s tím, že takový předdefinovaný formát není.

Děkuji za reakci a podporujte kojení.

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

Zdravím,

no tak to je pitomé. Trochu jsem doufal, že když si definujete svůj FormaterProvider, tak ho i automaticky aplikuje ... Ale nezoufejte, třeba se ozve někdo ze zkušenějších kolegů na win formy s elegantnějším řešením :-)

R.

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