DataGridView-read only pouze u vybraných sloupců   zodpovězená otázka

VB.NET

Zdravím, narazil jsem na jednu zajímavou věc u dataGridView. Mám tabulku o 16 sloupcích. Celý dataGridView má nastavenou vlastnost ReadOnly = True. Já bych potřeboval po načtení dat povolit uživateli zapisovat pouze do posledního sloupce (je to poznámka) ostatní data jsou neměnná. Představoval jsem si to tak že až načtu data a propojím dataGridView s datatable, přidám tam kód:

frmAplikace.dgv6statistiky.Columns(15).ReadOnly = False

To ale bohužel nefunguje, sloupec pořád nejde "rozkliknout".

Ale zarazilo mě že pokud to udělám obráceně (celému dataGridViewu nastavím ReadOnly = False) a do kódu vložím:

frmAplikace.dgv6statistiky.Columns(15).ReadOnly = True

aplikace se chová korektně (v tomto případě opačný efekt než chci, jde zapisovat všude kromě sloupce s indexem 15).

Je to chyba popřípadě jsem něco přehlédnul nebo to je korektní chování a já musím povolit zapisování všude a v cyklu zakázat zápis do všech sloupců mimo posledního?

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

Napadá mě projít sloupce v cyklu.

Poslední nechat ReadOnly=False.

With DataGridView1
            For i As Integer = 0 To .ColumnCount - 1
                If i = .ColumnCount - 1 Then _
                    .Columns(i).ReadOnly = False Else _
                    .Columns(i).ReadOnly = True
            Next
        End With

Možná by to za pokus stálo?

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

Ano to funguje, to jsem psal už v původním příspěvku. Spíš mě zajímá zda je to korektní chování nebo jestli jsem něco přehlédl.

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

Vidinou dobrého skutku bylo přehlédnuto,

že to bylo v příspěvku na konci, omluva.

Chování bohužel detailně netestováno.

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

Podle mě to nefunguje, protože pokud nastavíte celé tabulce ReadOnly = True, pak se už ani neobtěžuje kontrolovat vnitřní sloupce a řekne si prostě, že se tabulka editovat nebude a hotovo. Takže nastavení sloupce to už nemůže přepsat.

Je to taková analogie třeba k vlastnosti Visible. Když si dáte na formulář Panel a nastavíte mu Visible na False, tak i když kterýkoliv jeho vnitřní prvek bude mít Visible na True, taky nebude vidět. Tento princip se používá v .NETu poměrně často.

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

Děkuji za vysvětlení. Tušil jsem že tak něják to bude ale chtěl jsem se ujistit abych zbytečně nepoužíval cykly tam kde to není teba:)

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