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

No actualiza datagrid

Estas en el tema de No actualiza datagrid en el foro de .NET en Foros del Web. Hola: Tengo un datagrid que aparentemente hacia el update bien,pero nada mas tenia un registro para prueba, a la hora que tengo mas registros, nada ...
  #1 (permalink)  
Antiguo 05/04/2005, 17:40
 
Fecha de Ingreso: febrero-2005
Mensajes: 47
Antigüedad: 19 años, 2 meses
Puntos: 0
No actualiza datagrid

Hola:
Tengo un datagrid que aparentemente hacia el update bien,pero nada mas tenia un registro para prueba, a la hora que tengo mas registros, nada mas hace el update en el primer registro en los otros no hace el update enla base de datos, solo lo hace en el grid. Gracias .

El código es este:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Introducir aquí el código de usuario para inicializar la página

If Not Me.IsPostBack Then
inicia_adapter_consulta()
filldataset()
Session("dataset") = ds
binddatagrid()
Else
ds.Clear()
ds = DirectCast(Session("dataset"), DataSet)
End If

End Sub



Sub filldataset()

cn.Open()
datitles.Fill(ds, "consulta")
dapubs.Fill(ds, "enfermedades")
cn.Close()
ds.Relations.Add("consenfe", ds.Tables("enfermedades").Columns("IdEnfermedad"), ds.Tables("consulta").Columns("IdEnfermedad"))

End Sub





Sub binddatagrid()
DataGrid1.DataSource = Nothing
DataGrid1.DataSource = ds.Tables("consulta")
DataGrid1.DataKeyField = "IdPaciente"
DataGrid1.DataBind()
If DataGrid1.EditItemIndex >= 0 Then
Dim dgi As DataGridItem = DataGrid1.Items(DataGrid1.EditItemIndex)
Dim dropdownlist1 As DropDownList = DirectCast(dgi.FindControl("dropdownlist1"), DropDownList)
dropdownlist1.DataSource = ds.Tables("enfermedades")
dropdownlist1.DataTextField = "enfermedad"
dropdownlist1.DataValueField = "IdEnfermedad"
dropdownlist1.DataBind()
Dim dr As DataRow
dr = getdatarow(DataGrid1.DataKeys(DataGrid1.EditItemIn dex.ToString))
End If

End Sub



Function getdatarow(ByVal id As String) As DataRow
Dim drows() As DataRow
drows = ds.Tables("consulta").Select("IdPaciente='" & id & "'")
If drows.Length > 0 Then
Return drows(0)
End If



Private Sub DataGrid1_Editcommand(ByVal source As System.Object, ByVal e As DataGridCommandEventArgs) Handles DataGrid1.EditCommand
DataGrid1.EditItemIndex = e.Item.ItemIndex
binddatagrid()

End Sub

Private Sub DataGrid1_UpdateCommand(ByVal source As System.Object, ByVal e As DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand
Dim dgi As DataGridItem = DataGrid1.Items(e.Item.ItemIndex)
Dim dr As DataRow = getdatarow(DataGrid1.DataKeys(e.Item.ItemIndex).To String)
Try
dr("IdPaciente") = DirectCast(dgi.Cells(0).Controls(0), TextBox).Text
dr("Fecha_consulta") = CDate(DirectCast(dgi.Cells(1).Controls(0), TextBox).Text)
Dim dropdownlist1 As DropDownList = DirectCast(dgi.FindControl("dropdownlist1"), DropDownList)
dr("IdEnfermedad") = dropdownlist1.SelectedItem.Value
dr("receto") = DirectCast(dgi.Cells(3).Controls(0), TextBox).Text
DataGrid1.EditItemIndex = -1
Catch miexception As System.Exception
Console.WriteLine(miexception.Message)

End Try


inicia_adapter_consulta()
If ds.HasChanges Then
Label6.Text = "entre a modificart"
Try
cn.Open()
Catch miexception As System.Exception
Console.WriteLine(miexception.Message)
End Try

Try
datitles.Update(ds, "consulta")
datitles.Fill(ds, "consulta")
binddatagrid()
Catch miexception As System.Exception
Console.WriteLine(miexception.Message)

End Try
End If
End Sub
  #2 (permalink)  
Antiguo 06/04/2005, 07:46
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 19 años, 6 meses
Puntos: 1
La solucion como siempre es hacer un debug por la zona donde haces el getdatarow. Te envio el codigo que utilizo yo mas sencillo y claro que tu getdatarow por si te interesa.

Código:
			
DataRow fila= dsVariables.Tables[0].Rows.Find( dg.DataKeys[(int)e.Item.ItemIndex]);	
fila["nombre"]= ((TextBox)e.Item.FindControl("txtNombre")).Text.Trim();
  #3 (permalink)  
Antiguo 06/04/2005, 14:30
 
Fecha de Ingreso: febrero-2005
Mensajes: 47
Antigüedad: 19 años, 2 meses
Puntos: 0
el segundo renglón en donde dice "nombre" que va ahi ? y en "txtnombre" que va?

gracias
  #4 (permalink)  
Antiguo 06/04/2005, 15:47
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 19 años, 6 meses
Puntos: 1
"nombre" es el nombre del campo en la base de datos.
txtnombre es el nombrte del textbox que está en el datagrid
  #5 (permalink)  
Antiguo 06/04/2005, 22:47
 
Fecha de Ingreso: febrero-2005
Mensajes: 47
Antigüedad: 19 años, 2 meses
Puntos: 0
Asi es , tienes razón , ahi es donde esta el problema, ahora nada mas falta ver como lo arreglo porque lo que esta haciendo es que el grid o mas bien la base de datos tiene una clave combinada de dos campos, el paciente y la fecha (consulta) , pero a la hora que hace el getdatarow estoy viendo que solo pasa el paciente y en lo que tu me mandaste solo contempla un campo, cómo le puedo hacer para que agarre los dos campos ?

DataRow fila= ds.Tables["consulta"].Rows.Find( dg.DataKeys[(int)e.Item.ItemIndex]);
fila["IdPaciente"]= ((TextBox)e.Item.FindControl("IdPaciente")).Text.T rim();

pero me faltaria el otro que seria

fila["fecha_consulta"]= ((TextBox)e.Item.FindControl("Fecha")).Text.Trim() ;
Ahi cómo le hago? , please!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  #6 (permalink)  
Antiguo 07/04/2005, 01:00
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 19 años, 6 meses
Puntos: 1
pues como lo pones tu lo que no estoy seguro es si hace falta hacer una conversion explicita a tipo fecha pero es cuestion de probar...
  #7 (permalink)  
Antiguo 07/04/2005, 06:26
 
Fecha de Ingreso: febrero-2005
Mensajes: 47
Antigüedad: 19 años, 2 meses
Puntos: 0
lo único malo es que dg.DataKeys[(int)e.Item.ItemIndex] tiene solo el primer campo de Idpaciente y es por eso que encuentra el primero porque hay varios asi
1000 01/01/2001
1000 02/03/2001
1000 05/07/2001
1000 03/08/2001
y solo me trae dg.datakeys el 1000, como le hago para que traiga los dos campos porque en la tabla, la llave son los dos campos?

Gracias
  #8 (permalink)  
Antiguo 07/04/2005, 06:29
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 19 años, 6 meses
Puntos: 1
Es que el datakey del datagrid tiene que ser la clave (unica) de la tabla sino no tiene sentido
  #9 (permalink)  
Antiguo 07/04/2005, 10:05
 
Fecha de Ingreso: febrero-2005
Mensajes: 47
Antigüedad: 19 años, 2 meses
Puntos: 0
Es que la clave de la tabla es Idpaciente y Fecha_consulta , cómo le hago entonces ?
Gracias
  #10 (permalink)  
Antiguo 07/04/2005, 10:43
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 19 años, 6 meses
Puntos: 1
Puedes crear una clave id_tabla_pacientes, que sea unico aparte de los dos campos idpaciente y fecha_consulta por ejemplo
  #11 (permalink)  
Antiguo 07/04/2005, 11:02
 
Fecha de Ingreso: febrero-2005
Mensajes: 47
Antigüedad: 19 años, 2 meses
Puntos: 0
te refieres a agregar un campo a la tabla de consulta y utilizar ese campo para el datakey?
Si asi fuese ,
tendria que poner ese campo combinado en el datagrid para que fuera el datakey.
  #12 (permalink)  
Antiguo 07/04/2005, 13:23
 
Fecha de Ingreso: octubre-2004
Mensajes: 211
Antigüedad: 19 años, 6 meses
Puntos: 2
mmm , he leido tu mensaje y no se muy bien cual es el problema, el problema es como mostrar en el datagrid los dos campos que hacen de clave ? si es asi no es problema ninguno, en consulta ponle la consulta correspondiente.

Select idpaciente, fecha from Tabla_pacienteS where campo1="cosa";

NO era este el problema verdad?, lo siento
  #13 (permalink)  
Antiguo 07/04/2005, 13:39
 
Fecha de Ingreso: febrero-2005
Mensajes: 47
Antigüedad: 19 años, 2 meses
Puntos: 0
No, realmente ese no es el problema. El problema es que tengo un datagrid que a la hora de hacer el bind al grid , solo me toma el primer registro porque a la hora de hacer el getdatarow solo encuentra el primer registro porque la clave es combinada de dos campos y solo agarra el primero cuando uso el datagrid.datakey, entonces quiero saber cómo lo puedo hacer y arriba está el código pero lo hace con un solo campo
  #14 (permalink)  
Antiguo 08/04/2005, 01:01
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 19 años, 6 meses
Puntos: 1
Si haces lo que te he dicho y pones en el datagrid como clave el nuevo id no tendras ese problema ya que será único.
  #15 (permalink)  
Antiguo 08/04/2005, 11:32
 
Fecha de Ingreso: febrero-2005
Mensajes: 47
Antigüedad: 19 años, 2 meses
Puntos: 0
ya lo hice, cree un campo clave único autonumerico y ya quedó, muchisisisisisisi...mas gracias por tu ayuda
  #16 (permalink)  
Antiguo 10/04/2005, 08:02
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 19 años, 6 meses
Puntos: 1
Iuju! por fin, ha costado pero al menos lo hemos conseguido ;)
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 02:49.