Associazione TextBox con DataGridView

sabato 17 giugno 2006 - 15.44

nioMatrix Profilo | Junior Member

Salve a tutti

Vorrei associare la proprietà text di una textbox alla cella di una datagridview avente colonna = 1 e riga = riga selezionata. In modo che quando cambio la riga selezionata nella DataGridView, la textbox mi mostri il valore della colonna 1 della riga selezionata.

Spero di essere stato chiaro

Grazie

PS: Ho provato a scrivere questo:

Me.txtCodice.DataBindings.Add("Text", Me.DataGrid.SelectedRows(0).Cells(1), "Value")

ma poi la proprietà text della textbox rimane fissa sul valore della prima cella

blood Profilo | Senior Member

>Salve a tutti
>
>Vorrei associare la proprietà text di una textbox alla cella
>di una datagridview avente colonna = 1 e riga = riga selezionata.
>In modo che quando cambio la riga selezionata nella DataGridView,
>la textbox mi mostri il valore della colonna 1 della riga selezionata.
>
>Spero di essere stato chiaro
>
>Grazie
>
>PS: Ho provato a scrivere questo:
>
>Me.txtCodice.DataBindings.Add("Text", Me.DataGrid.SelectedRows(0).Cells(1),
>"Value")
>
>ma poi la proprietà text della textbox rimane fissa sul valore
>della prima cella

dovresti metterlo all'evento DataRowChanging utilizzando come indice di riga il Datagrid.CurrentRowIndex

---------------
Piscopo Paolo

:: wD @ IRCnet :: .NET wannabe 8-)

nioMatrix Profilo | Junior Member

Ciao

Ho fatto come hai detto tu, ma all'apertura della form, viene generata un'eccezione:

"Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index"

Private Sub DataGrid_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid.SelectionChanged
Me.txtCodice.DataBindings.Add("Text", Me.DataGrid.SelectedRows(Me.DataGrid.CurrentRow.Index).Cells(1), "Value")
End Sub

Ciao e grazie

PS: Io utilizzo una DataGridView e non ci sono l'evento DataRowChanged e la proprietà CurrentRowIndex.

blood Profilo | Senior Member

>Ciao
>
>Ho fatto come hai detto tu, ma all'apertura della form, viene
>generata un'eccezione:
>
>"Index was out of range. Must be non-negative and less than the
>size of the collection.
>Parameter name: index"
>
>Private Sub DataGrid_SelectionChanged(ByVal sender As Object,
>ByVal e As System.EventArgs) Handles DataGrid.SelectionChanged
>Me.txtCodice.DataBindings.Add("Text", Me.DataGrid.SelectedRows(Me.DataGrid.CurrentRow.Index).Cells(1),
>"Value")
> End Sub
>
>Ciao e grazie
>
>PS: Io utilizzo una DataGridView e non ci sono l'evento DataRowChanged
>e la proprietà CurrentRowIndex.

devi toglierlo da lì, e metterlo nell'evento del Datagrid di cambio riga o cambio colonna (consiglio personale, fai tutto in modo piu semplice) e la vista a mio parere non può esserti utile nel tuo contesto


ps: cmq ne abbiamo già parlato dai un occhio a questo thread potrebbe risultarti utile

http://www.dotnethell.it/forum/messages.aspx?ThreadID=8323

---------------
Piscopo Paolo

:: wD @ IRCnet :: .NET wannabe 8-)

nioMatrix Profilo | Junior Member

Non riesco a trovarlo questo evento di cambio riga.
Ma esiste nella datagridview?

Ciao e garzie

blood Profilo | Senior Member

scusami ma tu leggi quando uno ti dà un consiglio??
ti ho appena scritto di non usare il dataview perchè non ti serve....e ti ho detto di metterlo nell'evento della tua GRIGLIA evento chiamato DataGrid1.CurrentCellChanged, oppure negli eventi DataTable.ColumnChanging , DataTable.RowChanging

(vedi nella guida: Utilizzo degli eventi della DataTable )
---------------
Piscopo Paolo

:: wD @ IRCnet :: .NET wannabe 8-)

nioMatrix Profilo | Junior Member

>scusami ma tu leggi quando uno ti dà un consiglio??
>ti ho appena scritto di non usare il dataview perchè non ti serve....e
>ti ho detto di metterlo nell'evento della tua GRIGLIA evento
>chiamato DataGrid1.CurrentCellChanged, oppure negli eventi DataTable.ColumnChanging
>, DataTable.RowChanging
>
>(vedi nella guida: Utilizzo degli eventi della DataTable )
>---------------
>Piscopo Paolo
>
>:: wD @ IRCnet :: .NET wannabe 8-)

Io ti rispondo che non ho mai utilizzato il DataView, ma bennsì il DataGridView ( novità del framework 2.0 ) e se metto quel codice nell'evento CurrentCellChanged mi viene generato l'errore sopra citato.

Ciao

PS: Il DataGrid e il DataGridView sono due controlli diversi.

blood Profilo | Senior Member

Si ok, ora io non conosco il DataGridView ma probabilmente è come il vecchio DataView, e ok...ora ti sto dicendo che c'è un evento chiamato CurrentCellChanged e sta nel contenitore DataGrid, da lì hai il CurrentRowIndex (che ti torna l'indice della riga selezionata), e l'evento che viene scaturita al cambiamento di cella, oppure devi intercettare l'evento di cambio riga o cambio colonna del tuo DataTable (se usi un dataset: Me.dataset.tables(0) )
Per altro, tu sopra hai incollato parte di codice della SelectionChanged...e non della CurrentCellChanged...se hai provato in quest'ultimo metodo, ri incollami l'errore che ti dà cortesemente.

ps. ci capiamo sempre male

nel frattempo ti posto un esempio per farti capire:


AddHandler ds.Tables(0).ColumnChanging, AddressOf Cambio_colonna // gestore dell'evento di cambio colonna del datatable associato alla griglia (quindi cambio colonna griglia)


Private Sub Cambio_colonna(ByVal sender As Object, ByVal e As DataColumnChangeEventArgs)

e.ProposedValue = e.ProposedValue.toupper() // converto il valore immesso in maiuscolo (nel mio caso)

End Sub


---------------
Piscopo Paolo

:: wD @ IRCnet :: .NET wannabe 8-)

nioMatrix Profilo | Junior Member

Ho provato come hai detto

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ma mi viene generato il seguente errore all'avvio del form:

"Index non compreso nell'intervallo. Richiesto valore non negativo e minore della dimensione dell'insieme.
Nome parametro: index".

Credo che questo errore venga generato perchè all'avvio del form, nella Griglia, non ci sono ancora voci, e quindi, quando il DataAdapter va a popolare il DataSet e di conseguenza va a popolare anche la griglia, scatena l'evento CurrentCellChanged della Griglia, e dato che nella griglia non ci sono ancora celle e righe, viene generata la suddetta eccezione perchè facciamo riferimento ad una cella inesistente.

Ora credo che sia questo il poblema e non vorrei dire c......e.

Poi per qunto riguarda il secondo consiglio che mi hai dato ho fatto così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ma l'evento CambioRiga non viene affatto generato quando vado a cambiare riga nella Griglia

Ciao e ancora mille grazie

paolopat Profilo | Junior Member

Sono nuovo della programmazione Windows Form però credo di avere un consiglio : utilizzare BindingSource...

In pratica setti la proprietà DataSource di un oggetto BindingSource alla fonte dati da visualizzare nel DataGridView (esempio una DataTable). Successivamente imposti DataGridView.DataSorce = <oggetto BindingSource>.
Nel campo di testo usi text.Bindings.Add("Text",<oggetto BindingSource>,<campo della tabella da visualizzare nella textbox>). L'oggetto BindingSource gestisce al suo interno il CurrentyManager e PropertyManager che garantisce la sincronizzazione tra tutti i controlli di un form che puntanto alla stessa fonte dati....

blood Profilo | Senior Member

>Ho provato come hai detto
>
>Private Sub DataGrid_CurrentCellChanged(ByVal sender As Object,
>ByVal e As System.EventArgs) Handles DataGrid.CurrentCellChanged
>Me.txtCodice.DataBindings.Add("Text", Me.DataGrid.SelectedRows(Me.DataGrid.CurrentRow.Index).Cells(1),
>"Value")
> End Sub
>
>ma mi viene generato il seguente errore all'avvio del form:
>
>"Index non compreso nell'intervallo. Richiesto valore non negativo
>e minore della dimensione dell'insieme.
>Nome parametro: index".
>
>Credo che questo errore venga generato perchè all'avvio del form,
>nella Griglia, non ci sono ancora voci, e quindi, quando il DataAdapter
>va a popolare il DataSet e di conseguenza va a popolare anche
>la griglia, scatena l'evento CurrentCellChanged della Griglia,
>e dato che nella griglia non ci sono ancora celle e righe, viene
>generata la suddetta eccezione perchè facciamo riferimento ad
>una cella inesistente.
>
>Ora credo che sia questo il poblema e non vorrei dire c......e.
>

beh se è solo quello il problema potresti mettere un confronto iniziale sul CurrentRowIndex, così se maggiore di 0 (c'è una riga selezionata) , oppure verifichi se la proprietà VisibleRowCount > 0
esegue il codice scatenato dall'evento cellchanged altrimenti esce e non fa nulla

>
>Private Sub CambioRiga(ByVal sender As Object, ByVal e As System.Data.DataRowChangeEventArgs)
>Me.txtCodice.DataBindings.Add("Text", Me.DataGrid.SelectedRows(Me.DataGrid.CurrentRow.Index).Cells(1),
>"Value")
> End Sub
>
>ma l'evento CambioRiga non viene affatto generato quando vado
>a cambiare riga nella Griglia
>
>Ciao e ancora mille grazie
>

Prova con il RowChanging

ciao
---------------
Piscopo Paolo

:: wD @ IRCnet :: .NET wannabe 8-)

nioMatrix Profilo | Junior Member

Salve a tutti,

vorrei scusarmi con voi per la mia mancata risposta, in quanto ho avuto problemi con il conputer ( sale la temperatura della CPU a 76°C ) e quindi vi ringrazio per i vostri preziosi consigli che testerò appena posso.

Grazie a tutti

nioMatrix Profilo | Junior Member

Ragazzi ringrazio tutti voi per il vostro prezioso aiuto e porgo i miei più sinceri complimenti a paolopat che ha capito e risolto al meglio il mio problema

Grazie


PS: Scusatemi per il ritardo, ma come ho scritto sopra ho avuto alcuni problemi
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5