Valore da cella di DataGridView

giovedì 08 marzo 2012 - 19.07
Tag Elenco Tags  C#  |  VB.NET  |  .NET 2.0  |  .NET 4.0  |  Windows 7  |  Visual Studio 2008  |  Access (.mdb)  |  Office 2010

TheDude Profilo | Newbie

Ciao a tutti

prima di commettere un datagridviewicidio posto qua il mio problema.

Ho una datagridview che popolo via codice. Dopo averlo popolato aggiungo una colonna contenente l'immagine di un altoparlantino, cliccando su quella colonna viene riprodotto un mp3 il cui nome è ID.mp3 dove ID è in una nella prima colonna del datagrid (nascosta).

Ora quando clicco sulla cella con l'altoparlante, utilizzando questo codice
Dim cell As DataGridViewTextBoxCell = CType(DataGridView_ITA.Rows(e.RowIndex).Cells(0), DataGridViewTextBoxCell)
ottengo, in cell.value, l'ID

Quando poi ricarico il datagrid (lo carico ogni volta che scelgo la prima lettera delle parole da visualizzare, es. seleziono "A" da una dropdownlist e nel DGV ci vanno tutte le parole che iniziano con la A, seleziono "M" e ci vanno tutte le parole che iniziano con M e così via) dicevo, quando poi ricarico il DGV se clicco ancora sull'altoparlantino mi va in errore:

Impossibile eseguire il cast di oggetti di tipo 'System.Windows.Forms.DataGridViewImageCell' sul tipo 'System.Windows.Forms.DataGridViewTextBoxCell'.

La cella con l'altoparlantino è di tipo DataGridViewImageCell ma allora, mi dico io, non sarebbe dovuto apparire questo errore fin da subito??????

Aiuto!!!!

DomA Profilo | Expert

Ciao,
forse non ho ben capito il tuo problema, comunque per recuperare il valore potresti utilizzare questo codice:

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

Sostituendo lo 0 con 1, 2, 3... ottinei il valore dell'intersezione tra la riga selezionata e la colonna specificata nel codice.

Fammi sapere se è la strada giusta.
A presto,
http://www.infomidia.it

Domenico

TheDude Profilo | Newbie

Grazie mille, ho provato ma il problema persiste e siccome ho notato che ricaricando il DGV aumentano le colonne, suppongo che il problema sia dovuto al fatto che devo in qualche modo pulire il DGV...e mò mi studio come si fa!

Grazie!

DomA Profilo | Expert

Ciao,
se posti il codice forse riusciamo a capire dove si trova lerrore.
A presto,

http://www.infomidia.it

Domenico

TheDude Profilo | Newbie

Buona idea!
Dunque, sto facendo un dizionario italiano-dialetto e dialetto-italiano per un mio amico che è appassionato del nostro dialetto. Per la parte di visualizzazione l'idea è quella di fare una finestra nella quale c'è una combobox ed un DGV. Nel Load viene caricata la combo con la seguente query:
sicuel1 = "SELECT distinct left (paroladialetto, 1) from dizionario"
in modo che ci siano solo le iniziali.
Quando viene scelta un'iniziale, nel DGV vengono caricate le seguenti colonne
ID
Italiano
Frase in italiano
Dialetto
Frase in dialetto
Ascolta
La prima colonna è visible=False
Le prime 5 colonne le popolo dal DB
L'ultima la aggiungo da codice ed è quella cliccando sulla quale si ascolta un file mp3 il cui nome è ID & ".mp3"
Quello che devo quindi fare è recuperare l'ID relativo alla riga sulla quale clicco.
Il problema però è che ogni volta che scelgo una nuova iniziale viene aggiunta una colonna al DGV, per quello credo che sia necessario ripulirlo...

Ecco il codice di caricamento del DGV:
Private Sub carica_DG_ITA(ByVal inizia As String, ByVal lingua As String)

Dim sql As String
sql = "SELECT id, parola, italiano, paroladialetto, dialetto FROM dizionario where parola like '" & inizia & "%' order by parola, italiano"
Dim cn As New OleDbConnection(stringaConnessione)
Dim da = New OleDb.OleDbDataAdapter(sql, cn)
Dim ds As New DataSet
da.Fill(ds)

DataGridView_ITA.DataSource = ds.Tables(0)
cn.Close()

'Aggiungo la colonna con l'immagine
Dim treeIcon As New Icon("altoparlante.ico")
Dim Img As New DataGridViewImageColumn
Img.Image = treeIcon.ToBitmap
DataGridView_ITA.Columns.Insert(5, Img)

DataGridView_ITA.Columns(0).Visible = False

DataGridView_ITA.Columns(1).HeaderText = "Italiano"
DataGridView_ITA.Columns(2).HeaderText = "Frase in Italiano"
DataGridView_ITA.Columns(3).HeaderText = "Dialetto"
DataGridView_ITA.Columns(4).HeaderText = "Frase in Dialetto"
DataGridView_ITA.Columns(1).ReadOnly = True
DataGridView_ITA.Columns(2).ReadOnly = True
DataGridView_ITA.Columns(3).ReadOnly = True
DataGridView_ITA.Columns(4).ReadOnly = True

End Sub

e questo è il codice di quando clicco:

Private Sub DataGridView_ITA_CellContentClick_1(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView_ITA.CellContentClick
'Dim cell As DataGridViewImageCell = CType(DataGridView_ITA.Rows(e.RowIndex).Cells(0), DataGridViewImageCell)
'Dim cell As DataGridViewCell = CType(DataGridView_ITA.Rows(e.RowIndex).Cells(0), DataGridViewCell)
'MsgBox(cell.Value)
'Dim cell As DataGridViewTextBoxCell = CType(DataGridView_ITA.Rows(e.RowIndex).Cells(0), DataGridViewTextBoxCell)

Dim Nriga As Integer = Me.DataGridView_ITA.CurrentRow.Index
MsgBox(Nriga)

'Dim ilDATO = Me.DataGridView_ITA(Nriga, 0)
'MsgBox(ilDATO.Value)

'Dim player As New WMPLib.WindowsMediaPlayer()
'player.URL = "c:\dizWAV\MP3\" & ilDATO.Value & ".mp3"
''player.URL = "c:\dizWAV\MP3\" & cell.Value & ".mp3"
'player.settings.volume = 100
'player.controls.play()
End Sub

ho commentato un sacco di roba tra prove che ho fatto e la parte relativa al play dell'mp3.

Ciao e grazie!!!!

DomA Profilo | Expert

Ciao,
per iniziare apporta questa modifica:

Tuo codice: Dim ilDATO = Me.DataGridView_ITA(Nriga, 0)

lo devi modificare così: Dim ilDATO as integer = Me.DataGridView_ITA(0, Nriga).value

Domanda: la colonna 0 del dgw deve essere per forza nascosta?

Comunque, fammi sapere.
http://www.infomidia.it

Domenico
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5