Foros del Web » Programación para mayores de 30 ;) » .NET »

Error: Object must implement IConvertible.

Estas en el tema de Error: Object must implement IConvertible. en el foro de .NET en Foros del Web. Tengo un datagrid donde se encuentra un edititemtemplate, donde tengo un TextBox, en el cual va a actualizar el campo que se seleccione, este es ...
  #1 (permalink)  
Antiguo 27/06/2006, 13:38
 
Fecha de Ingreso: mayo-2006
Mensajes: 55
Antigüedad: 18 años
Puntos: 0
Error: Object must implement IConvertible.

Tengo un datagrid donde se encuentra un edititemtemplate, donde tengo un TextBox, en el cual va a actualizar el campo que se seleccione, este es el codigo:


<asp:datagrid id="lst_reg_serv" runat="server" Width="450px" AutoGenerateColumns="False" HeaderStyle-CssClass="enc">
<HeaderStyle CssClass="enc"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="Descripcion" ReadOnly="True" HeaderText="Servicio">
<ItemStyle CssClass="etiqueta"></ItemStyle>
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="Cargo">
<ItemStyle CssClass="dato"></ItemStyle>
<ItemTemplate>
<asp:Label ID = "car_serv" Runat ="server" text = '<%# Container.DataItem("cargo")%>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID = "edit_cargo" Runat = "server" Text = '<%# Container.DataItem("cargo")%>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="vigencia" ReadOnly="True" HeaderText="Vigencia" DataFormatString="{0:dd-MM-yyyy}">
<ItemStyle CssClass="dato"></ItemStyle>
</asp:BoundColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Enviar" HeaderText="Registrar Pago" CancelText="Cancelar"
EditText="Registrar">
<ItemStyle CssClass="dato"></ItemStyle>
</asp:EditCommandColumn>
</Columns>
</asp:datagrid>


En el evento del DataGrid donde actualizo es el siguiente:


Private Sub lst_reg_serv_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs ) Handles lst_reg_serv.UpdateCommand

Dim cargo_servicio As String
cargo_servicio = CType(e.Item.FindControl("edit_cargo"), TextBox).Text

'Actualiza a Base de Datos
cmd = New SqlClient.SqlCommand("UPDATE CargoServicios SET cargo = @car_serv WHERE IdServicio = @id_serv")
cmd.Parameters.Add(New System.Data.SqlClient.SqlParameter("@id_serv", System.Data.SqlDbType.Int, 4))
cmd.Parameters.Add(New System.Data.SqlClient.SqlParameter("@car_serv", System.Data.SqlDbType.Decimal, 9))
con.Open()
cmd.Connection = con
cmd.Parameters("@id_serv").Value = lst_reg_serv.DataKeys
cmd.Parameters("@car_serv").Value = cargo_servicio
cmd.ExecuteNonQuery()
con.Close()

lst_reg_serv.EditItemIndex = -1
muestra_servicios()

Cuando ingreso el campo que quiero actualizar y le doy en enviar me manda el siguiente error:

Error: Object must implement IConvertible.

El campo que quiero actualizar en la base de datos es de tipo decimal

Alguien sabe porque me sale ese error?

Alguien tiene alguna sugerencia para resolver esto?

Der antemano les agradezco.

Saludos
  #2 (permalink)  
Antiguo 27/06/2006, 14:41
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
necesitaría meterme a detalle de tu code.. porque no intentas probar de ésta forma:

Cita:
...
...
Dim sSQL as String = string.Format("UPDATE CargoServicios SET cargo = {0} WHERE IdServicio = {1}",cargo_servicio,lst_reg_serv.DataKeys)

cmd = New SqlClient.SqlCommand(sSQL)
cmd.Connection = con
con.Open()
cmd.ExecuteNonQuery()
con.Close()
Por cierto.. el lst_reg_serv.DataKeys me llama la atencion que lo tengas así porque estás regresando una colección no sería mas bien algo así:

Cita:
cmd.Parameters("@id_serv").Value = lst_reg_serv.DataKeys[e.Item.ItemIndex]
Checa las 2 opciones, Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 27/06/2006, 14:51
 
Fecha de Ingreso: mayo-2006
Mensajes: 55
Antigüedad: 18 años
Puntos: 0
En realidad la segunda opcion que pones si lo tengo implementado en otros datagrid de mi aplicacion, y si me realiza lo que quiero, pero en otros DataGrids me manda el siguiente error:

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

Es por ello lo puse de esa manera para que identificara el Id de la fila la cual quiero actualizar, en otros datagrids si me lo permite hacer. La verdad eso se me hizo muy raro pero ya hice pruebas y en la base de datos me actualiza los datos correctamente. Esta raro no?

Por cierto, el primer caso no entendi muy bien lo que pusiste.

Espero me puedas ayudar RootK.

Gracias





Cita:
Iniciado por RootK
necesitaría meterme a detalle de tu code.. porque no intentas probar de ésta forma:



Por cierto.. el lst_reg_serv.DataKeys me llama la atencion que lo tengas así porque estás regresando una colección no sería mas bien algo así:



Checa las 2 opciones, Salu2
  #4 (permalink)  
Antiguo 27/06/2006, 16:39
 
Fecha de Ingreso: mayo-2006
Mensajes: 55
Antigüedad: 18 años
Puntos: 0
Rootk

Ya solucione ese problema, tenias toda la razon en que para obtener el valor de la fila del DataGrid era con DataKeys.Item(e.item.ItemIndex).

Y el problema que yo tenia era que no le habia asignado el campo en la propiedad de DataKeyField al data Grid, es por ello que me mandaba ese error. Espero que esto les ayude a los demas a solucionar problemas como estos.

Saludos y gracias por el apoyo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 03:50.