Foros del Web » Programando para Internet » ASPX (.net) »

Recuperar el indice de la clave de un Datagrid(datakeycollection)

Estas en el tema de Recuperar el indice de la clave de un Datagrid(datakeycollection) en el foro de ASPX (.net) en Foros del Web. hola compañeros estoi diseñando un formulario web y tengo un problema,tengo un datagrid editable y necesito recuperar el indice de la clave del datagrid para ...
  #1 (permalink)  
Antiguo 29/03/2006, 03:37
 
Fecha de Ingreso: abril-2005
Mensajes: 55
Antigüedad: 19 años
Puntos: 0
Recuperar el indice de la clave de un Datagrid(datakeycollection)

hola compañeros estoi diseñando un formulario web y tengo un problema,tengo un datagrid editable y necesito recuperar el indice de la clave del datagrid para saber en que fila esta actualizando esta es la linea que lo recuperaria pero algo debo de tener mal porke me da el siguiente error:

linea:

Cita:
Dim codigos As String = DataGrid1.DataKeys.Item(e.Item.ItemIndex).ToString

error:

Cita:
El índice está fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección. Nombre del parámetro: index
Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

Detalles de la excepción: System.ArgumentOutOfRangeException: El índice está fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección. Nombre del parámetro: index

Error de código fuente:


Línea 329: Dim myTextBox As TextBox
Línea 330: ' Este es el valor de la clave primaria: Recuperado del DataKey, dado que se trata de un campo de sólo lectura
Línea 331: Dim codigos As String = DataGrid1.DataKeys.Item(e.Item.ItemIndex).ToString
Línea 332:
Línea 333: 'Response.Write(e.Item.ItemIndex)

haber si alguno de ustedes me podrian ayudar ,
gracias de antemano
  #2 (permalink)  
Antiguo 29/03/2006, 08:58
 
Fecha de Ingreso: septiembre-2004
Mensajes: 217
Antigüedad: 19 años, 7 meses
Puntos: 0
Espero te sirva ...

Si tienes un grid editable entonces puedes manipular el evento por lo tanto

_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
this.MiGrid.EditItemIndex = (int)e.Item.ItemIndex;
procesar()...;
}
  #3 (permalink)  
Antiguo 29/03/2006, 10:45
 
Fecha de Ingreso: mayo-2004
Ubicación: Guadalajara, Jalisco, México
Mensajes: 724
Antigüedad: 20 años
Puntos: 6
imanol22, en que evento de tu datagrid tienes ese codigo.. ? puedes publicarlo... ?
  #4 (permalink)  
Antiguo 30/03/2006, 01:21
 
Fecha de Ingreso: abril-2005
Mensajes: 55
Antigüedad: 19 años
Puntos: 0
Cita:
Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs ) Handles DataGrid1.EditCommand

DataGrid1.EditItemIndex = e.Item.ItemIndex
cargar_grid()

End Sub



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

SqlConnection1.Open()

Dim codigo As String
Dim nombre As String
Dim asignatura As String
Dim especialidad As String

'Response.Write("IMANOL")
Dim myTextBox As TextBox
' Este es el valor de la clave primaria: Recuperado del DataKey, dado que se trata de un campo de sólo lectura
If e.Item.ItemIndex > 0 Then

Dim codigos As String = DataGrid1.DataKeys.Item(e.Item.ItemIndex).ToString



'Response.Write(e.Item.ItemIndex)
myTextBox = e.Item.FindControl("txt_asig")
asignatura = myTextBox.Text

myTextBox = e.Item.FindControl("txt_espe")
especialidad = myTextBox.Text
'coger las 3 claves a las ke le puesto el alias y hacer lo mismo ke con los demas parametros
'aunque no los displaye luego
myTextBox = e.Item.FindControl("editar_codigo")
codigo = myTextBox.Text
myTextBox = e.Item.FindControl("editar_nombre")
nombre = myTextBox.Text
End If

' Ahora ejecute el procedimiento almacenado
Dim cmd As New SqlClient.SqlCommand("actualizar_materias", SqlConnection1)
cmd.CommandType = CommandType.StoredProcedure

cmd.Parameters.Add(New SqlClient.SqlParameter("@codigo_asignatura", SqlDbType.Char, 5)).Value = asignatura

cmd.Parameters.Add(New SqlClient.SqlParameter("@codigo_materia", SqlDbType.Char, 6)).Value = codigo

cmd.Parameters.Add(New SqlClient.SqlParameter("@codigo_especialidad", SqlDbType.Char, 5)).Value = especialidad

cmd.Parameters.Add(New SqlClient.SqlParameter("@nombre", SqlDbType.VarChar, 50)).Value = nombre

cmd.ExecuteNonQuery()
'Response.Write("IMANOL")

'cmd.Parameters.Add("@codigo_materia", SqlDbType.Char, 5) = codigo

'cmd.Parameters.Add("@nombre", SqlDbType.VarChar, 50) = nombre

End Sub
la tabla tiene esos cuatro campos ,que se llaman igual que los parametros, con las tres claves principales de la tabla he hecho un alias llamado "codigos"
y txt_asig,txt_espe,editar nombre y editar_codigo son los id de los texbox editables pero en el datagrid tengo visibles solo los campos de codigo de materia y nombre de materia,osea los id editar_codigo y editar_nombre.

he conseguido ya que me recupere la linea cuando le doy al evento editar y que me salgan los textbox para introducir los datos para actualizar pero cuando le doy a actualizar se llena la barra no se rompe ni da error pero luego en la base de datos (sqlserver) no actualiza nada,
nose si ustedes igual ven algo ke tengo mal,porke me esta dando dolor de cabeza ya esto llevo dos dias bloqueado.

gracias de antemano
  #5 (permalink)  
Antiguo 30/03/2006, 02:05
 
Fecha de Ingreso: abril-2005
Mensajes: 55
Antigüedad: 19 años
Puntos: 0
SIGO TENIENDO EL MISMO PROBLEMA
HE PUESTO LA CONDICION ESA

If e.Item.ItemIndex > 0 Then

Dim codigos As String = DataGrid1.DataKeys.Item(e.Item.ItemIndex).ToString

pero sigue dando el mismo error
  #6 (permalink)  
Antiguo 30/03/2006, 09:46
 
Fecha de Ingreso: mayo-2004
Ubicación: Guadalajara, Jalisco, México
Mensajes: 724
Antigüedad: 20 años
Puntos: 6
Código:
Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs ) Handles DataGrid1.EditCommand

DataGrid1.EditItemIndex = e.Item.ItemIndex
DataGrid1.SelectedIndex = e.Item.ItemIndex
cargar_grid()
End Sub
Podrias poner el codigo de tu
cargar_grid()

Te espero...
  #7 (permalink)  
Antiguo 31/03/2006, 01:16
 
Fecha de Ingreso: abril-2005
Mensajes: 55
Antigüedad: 19 años
Puntos: 0
Cita:
Sub cargar_grid()

SqlDataAdapter1.SelectCommand.Parameters.Add(New SqlClient.SqlParameter("@codigo_espe", SqlDbType.Char, 5)).Value = rbl_espec.SelectedItem.Value()

SqlDataAdapter1.SelectCommand.Parameters.Add(New SqlClient.SqlParameter("@codigo_asig", SqlDbType.Char, 5)).Value = ddList1.SelectedItem.Value()

SqlDataAdapter1.Fill(DS_materias1, "Materias")
DataGrid1.DataBind()
End Sub
esta es la funcion de cargar_grid

los parametro son por esto , dos radio buttonlist que dependiendo de cual se selecciona se despliega un drop o otro

Cita:
Sub cargar_grid()

SqlDataAdapter1.SelectCommand.Parameters.Add(New SqlClient.SqlParameter("@codigo_espe", SqlDbType.Char, 5)).Value = rbl_espec.SelectedItem.Value()

SqlDataAdapter1.SelectCommand.Parameters.Add(New SqlClient.SqlParameter("@codigo_asig", SqlDbType.Char, 5)).Value = ddList1.SelectedItem.Value()

SqlDataAdapter1.Fill(DS_materias1, "Materias")
DataGrid1.DataBind()
End Sub
  #8 (permalink)  
Antiguo 31/03/2006, 01:18
 
Fecha de Ingreso: abril-2005
Mensajes: 55
Antigüedad: 19 años
Puntos: 0
perdonn la segunda cita es este codigo:

Cita:
Private Sub rbl_espec_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles rbl_espec.SelectedIndexChanged

If rbl_espec.SelectedItem.Value = "DA3" Then
SqlDataAdapter2.Fill(DS_asig_desa1, "asignaturas")
ddList1.DataSource = DS_asig_desa1.Tables("asignaturas").DefaultView
ddList1.DataBind()

ElseIf rbl_espec.SelectedItem.Value = "AS3" Then
SqlDataAdapter3.Fill(DS_asig_admin1, "asignaturas")
ddList1.DataSource = DS_asig_admin1.Tables("asignaturas").DefaultView
ddList1.DataBind()
End If
End Sub
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




La zona horaria es GMT -6. Ahora son las 17:29.