Ricavare la riga selezionata in una DataGrid

mercoledì 18 febbraio 2004 - 14.24

wsaurim Profilo | Newbie

Ciao Gente,

ho provato a guardare un giro ma non so come fare.

Ho una DataGrid dove mostro i miei immobili.
Sotto a tale griglia vorrei metterci dei pulsanti che una volta premuti mi permettono di:
- stampare la scheda dell'immobile (crystal)
- cancellare l'immobile selezionato (*)
- modificare l'immobile selezionato (*)

(*) aprendo una form di modifica o conferma cancellazione.
In sostanza vorrei ricavarmi l' "id_immobile" da passare a pulsanti...

Mi indicate un tutorial da seguire su come poter fare questo?
p.s. Usate librerie esterne + flessibili e ricche della dataGrid di serie? Magari mi sto complicando la vita per niente ;)

Grazie 1000!

Ciao, Auri

luis Profilo | Newbie

Ciao,
dovresti essere più preciso nella descrizione del tuo problema, cmq cercherò di venirti incontro:
-per la stampa del report ,devi settare la proprietà "source" del report sul dataset con cui compili il tuo datagrid; devi quindi usare un CrystalReportViewer per visualizzarlo nel form e quindi la stampa può effettuata direttamente dall'opzione di stampa del browser;
-per la cancellazione e la modifica dei record, puoi aggiungere una colonna pulsante "modifica,aggiorna,annulla" dalla finestra proprietà del datagrid; non dimenticare di aggiungere il codice relativo ai comandi edit,cancel e update.
Ci vediamo
Ciao luis

wsaurim Profilo | Newbie

Ciao Luis,

molto "umano", grazie della comprensione ;)

Ok per la stampa, devo ancora affrontare seriamente crystal anche perchè l'articolo che ho trovato è per una app.ne web ed io dovrei farne una windows

Aggiungere una colonna "pulsante" sulla mia dataGrid? Magari, come potrei fare ciò?

p.s. va bene la datagrid di vb così com'è, non usi classi ad hoc?

Grazie 1K!!

Ciao, Auri

luis Profilo | Newbie

Guarda io solitamente lavoro su piattaformeC# ma per non dovrebbero esserci problemi neanche per VB.
Nella tua win form il datagrid supporta benissimo gli aggiornamenti sui dati; dovresti però implementare un controllo "button" che effettui il salvataggio nella banca dati delle eventuali modifiche sui record.Potresti aggiungere per esempio un pulsante nel form, cliccare sul pulsante e accedere al codice sorgente;prova a richiamare il metodo update sul tuo dataset.
Una soluzione potrebbe essere questa:
Private sub Button_click.......
sqlDataAdapter1.Update(istanzadeltuodataset)

Fatto questo una volta che modifichi o cancelli un record, se premi il pulsante le modifiche saranno salvate nel database.
Spero di esserti stato utile
ciao

Brainkiller Profilo | Guru

Ciao,
confermo quanto detto da Luis. La DataGrid è più che sufficiente per fare ciò che vuoi e anzi offre molte funzionalità all'utente. Nella prossima versione di Visual Studio .NET, Whidbey, trovi qualcosa in Home Page, sarà possibile creare DataGrid (il nuovo nome sara GridView) editabili, cioè dove potrai cancellare record, inserirne e aggiornarli, senza scrivere codice !
Purtroppo ciò non è ancora possibile con il FW 1.1 e VS.NET 2003, quindi dovrai adattarti e scrivere tu il codice nei vari eventi di update, delete, ecc.
Cmq. ti consiglio di sfogliare l'SDK del Framework, ci sono diversi esempi basilari che ti fanno comprendere come usare il controllo DataGrid e poi da lì procedere.

Per ciò che riguarda Crystal, l'articolo che c'è sul sito è una base di partenza. Quella è una Web Application, ma non pensare che sia più complicato con una WinForm anzi forse è più facile. Una volta aggiunti i riferimenti del caso di Crystal, avrai anche ad isposizione un controllo apposito da disegnare sulla finestra in cui puoi caricare il tuo Report, l'esportazione poi sarà una passeggiata.
ciao
david

wsaurim Profilo | Newbie

mi fa piacere che la prossima versione farà tutto in automatico anche se a me non dispiace scrivere codice; mi bastava l'imboccata per riuscire a partire con lo strumento (datagrid) giusto.

Grazie 1000 raga!

Ciao, Auri

wsaurim Profilo | Newbie

Ciao,

sorry ma mi è rimasto un dubbio. Sono riuscito a realizzare il mio bel report, mi chiedo a questo punto però come passargli l'esatto ID da visualizzare.

Nel caso dell'update faccio un aggiornamento di tutto il dataset e quindi non mi preoccupo di quale id sia stato modificato.

dovrei fare qualcosa del tipo mioreport.rpt?id=5 solo che dovrei farlo con una windows application alla pressione del tasto "scheda".

Grazie della pazienza ;)

Ciao, Auri

Brainkiller Profilo | Guru

Cioè tu vorresti filtrare il report in base ad un particolare ID ?
Se così fosse, è sufficiente che tu crei un DataSet con una Query SQL, filtrata da un Where e assegni il tutto al Report che ti visualizzerà solo la piccola parte di informazioni.

ciao
david

wsaurim Profilo | Newbie

Ciao David,

esatto, come da immagine allegata, riempio una datagrid:


Private Sub frmGestioneClienti_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim link As OleDbConnection
Dim strLink As String
Dim cmdSelect As OleDbCommand
Dim dataReader As OleDbDataReader
link = New OleDbConnection()
link.ConnectionString = common.BuildConnectionString()
link.Open()
Dim AdapterClienti As New OleDbDataAdapter("Select * from clienti", link)
Dim myDataSet As New DataSet()
AdapterClienti.Fill(myDataSet, "clienti")
DataGridClienti().DataSource = myDataSet.Tables("clienti").DefaultView
End Sub

E poi vorrei gestire l'evento in modo che premendo, ad esempio "dettagli", mi visualizzi una nuova form, all'interno della quale la select sarà "select * from clienti where id_cliente=" & parametro

Cosa ci devo mettere dentro:

Private Sub btnDettagli_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDettagli.Click
...
End Sub

Affinchè mi mostri quelo selezionato?
Scusa ma proprio non ne esco :((((

Grazie!

Brainkiller Profilo | Guru

Ciao, allora vediamo un po'.
Bisogna partire dal presupposto che quando premi sul pulsante dettagli, devi recuperare per lo meno l'indice della riga selezionata e da lì recuperare il valore della prima cella ossia l'ID. Successivamente nell'evento click del pulsante dettagli puoi instanziare una Form (che conterrà un'ulteriori datagrid in cui mostrerai i dettagli) e gli passerai l'ID. Durante il Page Load della seconda Form ti connetti al database e costruisci la query filtrata e bindi tutto alla datagrid.

Per poter passare il parametro alla seconda Form, devi crearti un overload del costruttore della Form (spero di usare termini semplici, bisogna conoscere un po' di programmazione con le classi). Solitamente è così:

Public Sub New()
MyBase.New()

InitializeComponent()
End Sub

allora tu ne costruirai una aggiuntiva così:

Public Sub New(id as String)
MyBase.New()

InitializeComponent()
End Sub

E poi dalla prima form nell'evento click potrai scrivere:


Dim f as Form1
f=new Form1("54")
f.Show()

Dove 54 è il parametro che verrà usato nella clausola Where.
ciao buon lavoro.
david

wsaurim Profilo | Newbie

Ciao David,

per il momento il mio problema è recuparare l'ID (primary key) della riga selezionata.
Sono riuscito a recuperare la riga della datagrid:

Private Sub btnScheda_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnScheda.Click
MsgBox(DataGridImmobili.CurrentRowIndex().ToString())
End Sub

Da questa come posso recuperarmi il famoso ID da inserire nella clausola where ?

Una volta capito questo magari posso proseguire con il test che mi hai suggerito.


Grazie!

Ciao, Auri

ZefVB Profilo | Newbie

Ciao Prova in questo modo:

Dim hit As System.Windows.Forms.DataGrid.HitTestInfo = DG1.HitTest(e.X, e.Y)

If hit.Row >= 0 Then
Me.DG1.Select(hit.Row)
TextBox1.text = Me.DG1.Item(hit.Row, 0).ToString()
End If

'dove DG1 è il nome del tuo datagrid
'textbox1 è appunto una textbox dove viene visualizzato il risultato
'(hit.row, 0) lo zero indica da quale colonna deve prendere il risultato
'quando viene selezionata una riga del datagrid

Ciao ciao

wsaurim Profilo | Newbie

Ciao ZefVB ;)

l'handler del bottone non mi accetta più "click" se al posto di
System.EventArgs
ci metto
System.Windows.Forms.MouseEventArgs

Ho provato, come segue, a mettere btnModifica.MouseDown ma non fa niente. Cosa non va nel mio codice???

Private Sub btnModifica_Click(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles btnModifica.MouseDown

Dim hit As System.Windows.Forms.DataGrid.HitTestInfo = DataGridClienti.HitTest(e.X, e.Y)

If hit.Row >= 0 Then
Me.DataGridClienti.Select(hit.Row)
MsgBox(Me.DataGridClienti.Item(hit.Row, 0).ToString())
End If
End Sub

TIA, Auri

ZefVB Profilo | Newbie

Scusa ma inizio ad avere qualche dubbio su qual'è il tuo problema,
pensavo ti servisse una volta selezionata una riga da un DATAGRID
il valore di una data colonna, in tal caso basta che tu inserisci il codice
del mio precedente post tra le righe:

Private Sub NOMEDATAGRID_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NOMEDATAGRID.MouseDown
....
....
End Sub

dove al click su una riga della griglia esegue il codice e assegna il valore della colonna
desiderata alla textbox.

Per altro non posso esserti molto di aiuto in quanto sono anche io un Principiante
con la P maiuscola :-)

Ciao ciao

wsaurim Profilo | Newbie

Ciao ZefVB

Esatto, una volta selezionata la riga all'interno del DATAGRID,
devo passare il valore di una colonna a dei button

All'interno dei button vorrei fare "delete * from tabella where id=" & ID_corrente


dove ID_corrente è il testo contenuto nella colonna 0 (primary key)
Credo mi basti trovare l'handler giusto da mettere sul button
Adesso ci provo.

Ciao, Auri

ZefVB Profilo | Newbie

Beh allora basta che cambi la riga:
TextBox1.text = Me.DG1.Item(hit.Row, 0).ToString()

in:

variabileID= Me.DG1.Item(hit.Row, 0).ToString()

ricordandoti di averla prima dichiarata con Dim....

e poi al click del pulsante inserisci la tua riga

>All'interno dei button vorrei fare "delete * from tabella where id=" & variabileID

Ciao ciao

wsaurim Profilo | Newbie

MITTTTTTTTTTTTTTTTICO FUNZIONAAA

scusate l'esplosione di gioia!

Grazie ZefvVB, grazie .nethell people ;))
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