Datagrid (metody) a soudržnost dat s ostatními prvky formuláře   zodpovězená otázka

VB.NET, WinForms

Ahoj, prosím o radu:

mám datagrid a textové pole na jednom formuláři.

1. Při naplnění datagridu potřebuji aby v textovém poli byla hodnota z prvního sloupce datagridu.

2. Pri výběru jiného řádku datagridu potřebuji zobrazit v textovém poli vždy hodnotu z prvního sloupce nově vybraného řádku.

Dá se toto řešit pomocí nějaké metody na datagridu? nebo nějak jina?

Děkuji

Martin

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

Snad těď neřeknu úplnou blbost, ale mám pocit, že datagrid má par vlastností jako Columns či Rows, přes které by se možná dalo dostat až na tu vytouženou hodnotu. Je to však čistě můj odhad.

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

no něco takového jsem taky hledal ale nenašel jsem nic jako active rows colums.value nebo text

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

Tak už vím, není tam nic jako ActiveColumn, ale je to jako vlastnost sloupce:

DataGridView1.Columns(i).Selected

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

Normálně si asi budete muset vystačit se zachycením změny výběru v DataGridu a vypsáním hodnoty požadovaného sloupce. např takto:

Private Sub Tabulka_RowEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Tabulka.RowEnter
    TextBox1.Text = tabulka.rows(e.RowIndex).cells("nazev sloupce").value
    End Sub

Samozřejmě je nutno nejprve ošetřit, jestli číslo řádku je platné, atd.

Tento postup ale pracuje jednosměrně, tj. do textboxu napíše obsah zvoleného sloupce vybraného řádku. Chci-li editovat hodnotu v textboxu, musím si aktualizaci do datagridview obsloužit sám.

Existuje ještě druhá možnost (záleží na tom, co máte v gridu za data a jak s nimi chcete dál pracovat.

Data si neukládejte přímo do Datagridview, ale utvořte si pro ně dataset a v něm tabulku s potřebnou strukturou.

Pak si do projektu vložte BindingSource, u kterého si nastavte vlastnost Datasource na Vámi vytvořený Dataset a jako Datamember vyberte z DataSetu Vaši tabulku.

No a teď si dejte na form svůj Datagridview, který navažte na právě vytvořený BindingSource.

A pokud si do formu vložíte další prvek, třeba ten Váš TextBox, můžete u něj opět v okně properties nastavit v DataBindings navázání hodnoty Text na BindinbSource1 - Column1 (neboli Vámi vytvořený BindidgSource a z něj zvolený sloupec).

Od této chvíle Vám budou hodnoty v Textboxu kopírovat hodnotu zvoleného sloupce aktuálně vybraného řádku (dokonce ten sloupec můžete v DataGridu i třeba skrýt) a co víc - obě políčka budou rovnocenná, tzn. můžete editovat jak v datagridu, tak i v textboxu.

Záleží tedy na tom, co od aplikace očekáváte a jaký přístup je Vám bližší.

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

Díky super rada,

jenom ještě mi to hází chybu při použití toho rowindexu.

při e.rowindex = 0 je vše OK

pokud místo e.rowindex napíšu hodnotu třeba 1 tak to proběhně normálně

a pokud tam dám e.rowindex a není 0 tak to hodí chybu:

"When casting from a number, the value must be a number less then infinity" a "Make sure the source type is convertible to the destination type"

co s tím?

Martin

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

Tak to nevím, pokud si na form dám dataGridView, pro jednoduchost si ho nazvu "Tabulka", udělám do něj několik sloupečků (s implicitními názvy Column1, Column2,....)

Přidám na form ještě dva textboxy pro kontrolu, tak můžu do Datagridu klikat jak šílený, vepisovat hodnoty, potvrzovat enterem, atd, a metoda:

Private Sub Tabulka_RowEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Tabulka.RowEnter
        TextBox1.Text = Tabulka.Rows(e.RowIndex).Cells("Column1").Value
        TextBox2.Text = e.RowIndex

    End Sub

mi spolehlivě funguje (do jednoho textboxu vypisuje číslo aktuálního řádku, do druhého obsah prvního sloupce daného řádku.

Ostatně, jaká data máte v tom Vašem sledovaném sloupci? Nemáte tam třeba "Nic" (nemyslím prázdný řetězec, ale nějakou formu Nothing)?

Všechny jednoduché typy totiž mají převod na string (to co potřebujete do textboxu) implicitně definován, ale zkuste pro jistotu:

Nejprve příkaz (viz příklad výše) doplnit:

TextBox1.Text = Tabulka.Rows(e.RowIndex).Cells("Column1").Value.ToString

Případně, pokud Vám ani to nezabere, vyhoďte ten příkaz TextBox1.Text=.....

a zjistěte, jestli Vám vypisuje ten druhý příkaz relevantní čísla řádků, pokud ano, chyba bude v interpretaci obsahu Vámi zvoleného sloupce.

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