Record da una DataGrid

venerdì 11 febbraio 2005 - 16.00

secks Profilo | Senior Member

Sto usando VB.NET x windows.
Ho una datagrid alimentata da una tabella (DataGrid1.DataSource = miaDataTable ).
Vengono visualizzati tutti i dati regolarmente.
Clicco sul titolo di una colonna e viene modificato l'ordinamento.
Doppio click sulla riga x selezionare.
Con il seguente comando:

Dim y As DataRow = CType(DataGrid1.DataSource, DataTable).Rows(DataGrid1.CurrentCell.RowNumber)

credo di prendere la riga selezionata, invece mi da un'altro record, penso della posizione originale.

Come posso avere il record scelto?

Ciao a tutti e grazie.
Paolo.

19018 Profilo | Expert

Potresti usare questa riga di codice da usare su uno degli eventi del datagrid (come updatecommand,DeleteCommand,etc...) :

string key = DataGrid1.DataKeys[e.Item.ItemIndex].ToString();

ti restituisce sotto forma si stringa il campo chiave della riga selezionata,così puoi operare su quella specifica riga.
ciao!

secks Profilo | Senior Member

Mi sembra una buona soluzione, ma in questo caso sto utilizzando sto utilizzando VB.NET x windows e la suddetta proprietà non c'è.

Grazie comunque.
Ciao, Paolo.

19018 Profilo | Expert

Ciao!Lo stesso codice lo puoi usare anche con vb.net devi solo modificare un pò la sintassi, se non ricordo male basta cmabiare le [ ] con ( ) cmq prova perchè lo puoi fare anche vb.net!ciao!

secks Profilo | Senior Member


L'istruzione

string key = DataGrid1.DataKeys[e.Item.ItemIndex].ToString();

x quanto ho visto e provato funziona su progetto Web.

La proprietà DataKeys la trovo attivata solo x la DataGrid che gira su progetti Web e non x quelli su Windows.
La mia necessità è su progetto Windows.

Le soluzioni che ho trovato con le seguenti istruzioni:

1 Dim y As DataRow = CType(DataGrid1.DataSource, DataTable).Rows(DataGrid1.CurrentCell.RowNumber)
che però se clicco in testata di una colonna e cambio ordinamento non pesco il record scelto

2 pippo = DataGrid1.Item(DataGrid1.CurrentRowIndex, 0)
che però sarebbe opportuno avere un campo con chiave univoco su cui puntare presente in una determinata cella altrimenti,
come ho fatto, è necessario prendere le varie celle x determinare la chiave.

X DataGrid su progetto windows non ho trovato altre soluzioni.

Ciao Paolo.

19018 Profilo | Expert

Ciao!Ho provato a fare una prova e ci sono riuscito...non è stato facile sinceramente ma con un pò di applicazione sono arrivato a questo codice che ha risolto il problema :
VERSIONE C#
System.Data.DataRow dr;
CurrencyManager cm = (CurrencyManager)this.BindingContext[dataGrid1.DataSource,dataGrid1.DataMember];
DataView dv = (DataView)cm.List;
dr =dv[cm.Position].Row;
dr.Delete();

VERSIONE VB.NET
Dim cm As CurrencyManager = CType(Me.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember), CurrencyManager)
Dim dv As DataView = CType(cm.List, DataView)
Dim dr As DataRow
dr = dv.Item(cm.Position).Row
dr.Delete();

dr è proprio la riga che tu hai selezionato...la puoi così cancellare ad esempio!Ciao e fammi sapere se hai problemi!

secks Profilo | Senior Member

Funziona alla grande!
Grazie, ciao.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5