Cell provided already belongs to a row. This operation is not valid. E...

martedì 25 marzo 2008 - 09.18

mircoso Profilo | Newbie

Ciao a Tutti.

questa volta ho un'altro problema stano che non riesco a capire.

Quando provo ad assegnare ad una cella una DataGridViewComboBoxCell mi da l'errore:
"Cell provided already belongs to a row. This operation is not valid."

Per capire meglio la situazione vi spiego quello che faccio.

Ho due griglie, la prima carico dei template e quando scelgo una riga mi deve caricare nella seconda il modello scelto che non sono altro che dei valori.

Finche avevo sono dei valori fissi ed avevo una DataGridViewTextBoxColumn era tutto ok, ma da quando mi hanno chiesto che a seconda della colonna scelta dovrei caricare un DataGridViewComboBoxCell con dei valori o una DataGridViewTextBoxCell per lasciare l'inserimento libero ho dei problei.
La cosa strana è che succede al 3 giro, ovvero dopo la scelta del 2 templete.

allego il codice che uso:

With DataGridView1
Dim Valore
Valore = Nothing
If Mid(.Rows(Row).Cells("NomeCampo").Value, 1, 1) = "1" Then
'Questo è un mio controllo per sapere che colonna devo unsare
Dim temp As String = Mid(.Rows(Row).Cells("NomeCampo").Value, 3, InStr(.Rows(Row).Cells("NomeCampo").Value, "§") - 3)
Dim Col As Integer = Val(temp)

Dim b As New DataGridViewComboBoxCell
b = Colonne(Col)
b.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing

If Not CaricaVuoto Then Valore = .Rows(Row).Cells("Valore").Value

'Quan va in ERRORE
.Rows(Row).Cells("Valore") = b

If Err.Number > 0 Then
' "Cell provided already belongs to a row. This operation is not valid."
MsgBox(Err.Number.ToString & " " & Err.Description.ToString)
End If

b.Dispose()
b = Nothing

'Se richiesto carico il valore già in cella
If Not CaricaVuoto Then
Dim Tipo As String = .Rows(Row).Cells("Valore").ValueType.Name
If Not IsNothing(Valore) Then
Select Case Tipo.ToLower
Case "byte"
Valore = System.Convert.ToByte(Valore)
Case "int32"
Valore = System.Convert.ToInt32(Valore)
Case Else
Valore = Nothing
End Select
End If
.Rows(Row).Cells("Valore").Value = Valore
End If
Else
Dim b As New DataGridViewTextBoxCell
Valore = .Rows(Row).Cells("Valore").Value
.Rows(Row).Cells("Valore") = b
b.Dispose()
b = Nothing
If Not CaricaVuoto Then .Rows(Row).Cells("Valore").Value = Valore
End If

End With

Grazie a tutti per l'aiuto che mi darete

Mirco

0v3rCl0ck Profilo | Guru

Ciao,

Questo non va bene: b = Colonne(Col)

Dovresti clonare quella colonna, e non utilizzarla per poi cambiargli le proprietà. Devi per forza utilizzare l'altra colonna? Non puoi creartene una nuova collegandoci lo stesso datasource?


http://blogs.dotnethell.it/Regulator/

mircoso Profilo | Newbie

Ciao,

si sono costretto e comunque proprio ora ho risolto con un colonne(col).clone



:-)


0v3rCl0ck Profilo | Guru

Bene

http://blogs.dotnethell.it/Regulator/
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5