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

Locura con DeleteCommand Datagrid

Estas en el tema de Locura con DeleteCommand Datagrid en el foro de ASPX (.net) en Foros del Web. Hola Amigos La verdad q llevo varias horas en esto y no encuentro la solucion...!!! Tengo un DataGrid con 3 rows llenas mediante codigo... Estoy ...
  #1 (permalink)  
Antiguo 22/03/2006, 16:37
 
Fecha de Ingreso: noviembre-2003
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
Pregunta Locura con DeleteCommand Datagrid

Hola
Amigos

La verdad q llevo varias horas en esto y no encuentro la solucion...!!!
Tengo un DataGrid con 3 rows llenas mediante codigo...
Estoy aplicando ButtonColumn para poder borrar lineas de pedidos..

Pero no me funciona este boton...

e.item.index me arroja un digito (el del index del la fila), osea lee el indice de la fila... pero al momento de ver si "row" encontro algo, no encuentra nada, el metodo FIND no me esta encontrando la fila.

Asi q simplemente al boton este no le da la gana de borrar nada...
Porfa ayudenme q me psicoseo

Les copio el codigo del DeleteCommand para que me orienten porfa.

--------------------------------------------------------

Private Sub dgdPedido_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs ) Handles dgdPedido.DeleteCommand
Dim dt As DataTable = CType(Session("dt"), DataTable)
Dim row As DataRow
row = dt.NewRow()
If e.Item.ItemIndex > -1 Then
row = dt.Rows.Find(dgdPedido.DataKeys(e.Item.ItemIndex))
End If
If Not row Is Nothing Then
row.Delete()
End If
Session("dt") = dt
Dim dv As DataView = New DataView(dt)
dgdPedido.DataSource = dv
dgdPedido.DataBind()
End Sub
-------------------------------------------------------------
__________________
Uno para todos!!!
Y todos para uno!!!
  #2 (permalink)  
Antiguo 22/03/2006, 17:03
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 1 mes
Puntos: 50
Cita:
no encuentra nada, el metodo FIND no me esta encontrando la fila.
Una pregunta antes que otra cosa... estas seguro que en tu datagrid le asignaste el ID de tu datatable como datakey.? obviamente tu datatable debe tener una columna de tipo ID... quedadon algo así tu grid..:

Cita:
<asp:dataGrid runat="server" DataKeyField="Tu_ID"...>
Y despues de que hagas modificaciones recuerda hacer un AccepChanges para que tengas las últimas modificaciones.. quedando así:


Cita:
....
dt.AcceptChanges()
Session("dt") = dt
Dim dv As DataView = New DataView(dt)
dgdPedido.DataSource = dv
dgdPedido.DataBind()
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 22/03/2006, 17:48
 
Fecha de Ingreso: noviembre-2003
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
A ver...

El campo DataKeyField si lo tenia asignado, a mi IDARTICULO

Con eso, no borraba nada, considera q nunca se va a repetir un numero de articulo.

Cambie el dkf a "ITEMS" que es un correlativo, y con este cambio,.. si borra...
Pero si borro un item entremezclado.. me aparece un fallo de numeracion...

Pero creo q ya esta superado el problema.
Mas o menos iba por el tipo de campo q pongo en el DataKeyField.

Como puedo manejar este error nuevo q me sale.. alguna idea?
__________________
Uno para todos!!!
Y todos para uno!!!
  #4 (permalink)  
Antiguo 22/03/2006, 19:28
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 1 mes
Puntos: 50
Si estás generando los ID´s de forma manual asegurate que tengas una columna como ésta:

Cita:
Dim myColumn As DataColumn = New DataColumn
myColumn.DataType = System.Type.GetType("System.Int32")
With MyColumn
.AutoIncrement = True
.AutoIncrementSeed = 1
.AutoIncrementStep = 1
End With
Con ello te aseguras que siempre tendrás un ID único en esa columna por lo que podrás manipular tus registros de forma única.

Checalo....
  #5 (permalink)  
Antiguo 22/03/2006, 22:20
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 2 meses
Puntos: 7
Otra forma para eliminar de tu tabla sería:
Código:
...
 Dim dt As DataTable = CType(Session("dt"), DataTable)
If dt Is Nothing OrElse dt.Rows.Count <= e.Item.DataSetIndex Then Return
dt.Rows(e.Item.DataSetIndex).Delete()
dt.AcceptChanges()
...
Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #6 (permalink)  
Antiguo 23/03/2006, 09:39
 
Fecha de Ingreso: noviembre-2003
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
Pregunta

Poco por poco voy avanzando...

Probe tu sugerencia xknown, con buen resultado...

Por otro lado Rootk he agregado esa mycolumn(Items) a mi Datatable...

Esto lo hago en una funcion CrearTabla que llamo en cada Refresh (sesion)

DT.Columns.Add("Items", GetType(Integer))
DT.Columns.Add("Division", GetType(Integer))
DT.Columns.Add("IdCategoria", GetType(String))
DT.Columns.Add("Categoria", GetType(String))..entre otras columnas mas...

En HTML... Dibujo mi datagrid, asignandole las columnas del DT.

<Columns>
<asp:BoundColumn DataField="Items" HeaderText="Items"></asp:BoundColumn>
<asp:BoundColumn DataField="Division" HeaderText="Division"></asp:BoundColumn>
<asp:BoundColumn DataField="IdCategoria" HeaderText="IdCategoria"></asp:BoundColumn>.. siguen las demas,...

Y el datakeyfield="Items"

Hasta ahi creo q voy bien...

Tengo mi boton Agregar... que "agrega" items al datagrid...

(...)
Dim row As DataRow
DT = Session("dt")
row = DT.NewRow
row("Items") = <-- Mi duda esta AQUI!!!!!!!!!!!!
row("Division") = ngcio
row("IdCategoria") = idcat


Que agrego como ITEMS, si lo dejo en blanco, me arroja un error de que ITEMS no puede recibir nulls.

Ayudenme si es posible... Graciaas...
__________________
Uno para todos!!!
Y todos para uno!!!
  #7 (permalink)  
Antiguo 23/03/2006, 13:05
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 2 meses
Puntos: 7
Tu columna ITEMS es autonumérico?

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #8 (permalink)  
Antiguo 23/03/2006, 13:10
 
Fecha de Ingreso: noviembre-2003
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
Dim Items As DataColumn = New DataColumn
Items.DataType = System.Type.GetType("System.Int32")
With Items
.AutoIncrement = True
.AutoIncrementSeed = 1
.AutoIncrementStep = 1
End With

Asi esta definida mi Columna ITEMS
__________________
Uno para todos!!!
Y todos para uno!!!
  #9 (permalink)  
Antiguo 23/03/2006, 17:55
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 2 meses
Puntos: 7
Entonces, si no me equivoco, no intentes asignar un valor a esa fila (simplemente no lo tomes en cuenta)

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #10 (permalink)  
Antiguo 23/03/2006, 18:41
 
Fecha de Ingreso: noviembre-2003
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
He intentado eso... Y al momento de querer agregar un item nuevo..

Me sale que ITEMS no acepta valores nulos...
--------------------------------------------


Dim row As DataRow
DT = Session("dt")
row = DT.NewRow
'row("Items")= 1 + DT.Rows.Count() <-- Lo dejo comentado
row("Division") = ngcio
row("IdCategoria") = idcat ' jalar dato de num sublinea
row("Categoria") = cbxCategoria.SelectedValue
row("IdArticulo") = idart ......etc...

-------------------------------------------

Ya me estoy desesperando.. buuuuuuuuuu....
Por donde ira mi error???
__________________
Uno para todos!!!
Y todos para uno!!!
  #11 (permalink)  
Antiguo 23/03/2006, 19:16
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 2 meses
Puntos: 7
No tengo idea, ni siquiera muestras el error que recibes (no somos adivinos), pero para que veas que si funciona lo que te dije, prueba este código:
Código:
Imports System.Data

Module Module1
    Sub Main()
        Dim dt As New DataTable

        Dim Items As DataColumn = New DataColumn("items")
        Items.DataType = System.Type.GetType("System.Int32")
        With Items
            .AutoIncrement = True
            .AutoIncrementSeed = 1
            .AutoIncrementStep = 1
        End With
        dt.Columns.Add(Items)
        dt.Columns.Add(New DataColumn("desc", GetType(String)))

        Dim dr As DataRow
        For i As Integer = 0 To 10
            dr = dt.NewRow
            dr("desc") = "foo " & i
            dt.Rows.Add(dr)
        Next

        For Each dr In dt.Rows
            Console.WriteLine(dr("items") & " --> " & dr("desc"))
        Next
    End Sub
End Module
Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #12 (permalink)  
Antiguo 28/03/2006, 09:05
 
Fecha de Ingreso: noviembre-2003
Mensajes: 107
Antigüedad: 20 años, 4 meses
Puntos: 0
Sonrisa

Bueno..
Probe este codigo.. funciona OK...

Especificamente para mi caso les cuento que .. simplemente elimine la columna ITEMS, y puse como PK el Cdgo_artclo. Asi solucione mi problema con los DeleteCommands.

Pero chevere no? jajaja

Saludos y Gracias a todos.
__________________
Uno para todos!!!
Y todos para uno!!!
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 00:10.