Poradové číslo v datagridview   zodpovězená otázka

VB.NET, WinForms

Caute

do datagridview taham udaje Priezvisko a meno z databazy, da sa nejako nastavit aby mi datagrid cisloval riadky, ako poradove cislo?

vdaka

cujan

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

DataGridView je dvourozměrná kolekce řádků a sloupců, takže se řádky číslují (indexují).

datagridview.Rows[i].Index
datagridview[i, j].RowIndex

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

oki to chapem, cize ako na to cislovanie? :-)

vdaka

cujan

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

Pokud plníte DataGridView (popř. DataTable) v nějaké cyklu, tak index řádku vložíte jednoduše.

Jinak je třeba přidat sekvenci přímo do selectu.

Pro MS Sql nějak takto...

SELECT ROW_NUMBER() OVER (ORDER BY [sloupec] DESC) AS CisloRadku, * FROM [tabulka]

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

no mne akosi ta funkcia v sql nefunguje

:-(

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

Jakou používáte databázi? Tohle je pro MS Sql. Zkoušel jsem to a funguje v pořádku. Když tak tu napište váš select, třeba v něm máte chybu.

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

pouzivam databazu typu sdf.

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

No tohle mi zrovna moc nepomohlo :-)

Ještě se tedy zeptám... jak DataGridView plníte?

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

Tak plnim pomocou datasetu.

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

Ten můžete ale plnit několika způsoby. Budu tedy předpokládat, že ho plníte přes adaptér metodou Fill(), což není žádný cyklus.

Pokud se nejedná o miliony záznamu (což asi ne), tak bych po naplnění udělal cyklus, kde bych pořadí doplnil.

for (int i = 0; i < dataset.datatable[0].Rows.Count; i++) {
   dataset.datatable[0].Rows[i]["Sequence"] = i;
}

Předpokladem je samozřejmě existence sloupce Sequence. Pokud by náhodou při plnění tabulky vadilo, že v selectu žádný takový sloupec není tak si ho tam taky přidejte...

SELECT *, null as Sequence FROM ...

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

Sice s křížkem po funuse, ale řešil jsem stejný problém a řekl bych že jsem to vyřešil elegantněji než je cyklus, takže se chci podělit, třeba se to bude někomu hodit.

Každý sloupec v DataTable (tzn. DataColumn) má vlastnost AutoIncrement, takže pokud plníte dataTable pomocí metody Fill vložte do datatable ještě před voláním metody Fill nový sloupec a nastavte příslušné vlastnosti:

'vytvoření nového sloupce

 Dim sloupecCislo As DataColumn = New DataColumn

 sloupecCislo.ColumnName = "RowNumber"
 sloupecCislo.DataType = Type.GetType("System.Int32")
 sloupecCislo.AutoIncrement = True
 sloupecCislo.AutoIncrementSeed = 1
 sloupecCislo.AutoIncrementStep = 1


'přidání sloupce do dataTable
 myDataTable.Columns.Add(sloupecCislo)

Výhoda je že si můžete nastavit počáteční hodnotu, velikost přírustku a také Unique, což může do jistné míry pro interní účely aplikace suplovat absenci PK i když by tam správně většinou měl být:) A hlavně tento způsob není závislý na způsobu plnění dataTable, takže pokud později přidáte do dataTable další řádky, číslo řádku se doplní aniž by jste museli znovu spouštět cyklus na číslování.

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

Do akej metody sa to presne vklada?

vdaka

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

Je to víceméně jedno, jen je potřeba to nastavit dřív než začnete datatable plnit daty z databáze. Já to plním ve stejné proceduře která mi načítá data z databáze, protože tam si deklaruju onu dataTable (mám ji deklarovanou pouze na úrovni procedury).

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