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

En un datagrid, al finalizar la edicion de una fila me pase a otra fila determinada

Estas en el tema de En un datagrid, al finalizar la edicion de una fila me pase a otra fila determinada en el foro de ASPX (.net) en Foros del Web. Hola comunidad, un saludo a todos Tengo un DataGrid asi: Código: <asp:datagrid id="GrdVar" runat="server" Width="700" CellSpacing="2" OnUpdateCommand="Grd_Update" OnCancelCommand="Grd_Cancel" OnEditCommand="Grd_Edit" AutoGenerateColumns="False" DataKeyField="CveEntVar" BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="0px" BackColor="White" ...
  #1 (permalink)  
Antiguo 25/09/2007, 15:58
Avatar de krakxp  
Fecha de Ingreso: junio-2006
Ubicación: NA
Mensajes: 105
Antigüedad: 17 años, 10 meses
Puntos: 0
En un datagrid, al finalizar la edicion de una fila me pase a otra fila determinada

Hola comunidad, un saludo a todos

Tengo un DataGrid asi:

Código:
<asp:datagrid id="GrdVar" runat="server" Width="700" CellSpacing="2" OnUpdateCommand="Grd_Update"
                            OnCancelCommand="Grd_Cancel" OnEditCommand="Grd_Edit" AutoGenerateColumns="False" DataKeyField="CveEntVar" BorderColor="#DEDFDE"
                            BorderStyle="None" BorderWidth="0px" BackColor="White" CellPadding="2" GridLines="Vertical" ForeColor="Black">
                            <FooterStyle BackColor="#CCCC99"></FooterStyle>
                            <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#CE5D5A"></SelectedItemStyle>
                            <AlternatingItemStyle CssClass="bgl"></AlternatingItemStyle>
                            <ItemStyle CssClass="bgg"></ItemStyle>
                            <HeaderStyle Font-Bold="True" HorizontalAlign="Center" ForeColor="Black" CssClass="bgd"></HeaderStyle>
                            <Columns>
                                <asp:BoundColumn Visible="False" DataField="CveEntVar" SortExpression="CveEntVar" ReadOnly="True"
                                    HeaderText="Clave">
                                    <ItemStyle Wrap="False"></ItemStyle>
                                </asp:BoundColumn>
                                <asp:BoundColumn DataField="PosVarFrm" ReadOnly="True">
                                    <ItemStyle Font-Size="8pt" Wrap="False" Width="10%"></ItemStyle>
                                </asp:BoundColumn>
                                <asp:TemplateColumn SortExpression="NomCrtVar" HeaderText="Abreviatura">
                                    <HeaderStyle Font-Bold="True" CssClass="ltr"></HeaderStyle>
                                    <ItemStyle HorizontalAlign="Center" Width="10%"></ItemStyle>
                                    <ItemTemplate>
                                        <asp:Label id=LblCrt runat="server" Font-Size="8" Text='<%# DataBinder.Eval(Container.DataItem, "NomCrtVar") %>'>
                                        </asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <asp:TextBox id=edit_NomCrt runat="server" Font-Size="8" Columns="5" Text='<%# DataBinder.Eval(Container.DataItem, "NomCrtVar") %>' MaxLength="5">
                                        </asp:TextBox>&nbsp;
                                        <asp:RequiredFieldValidator id="rfvNomCor" CssClass="error" Runat="server" ForeColor=" " ControlToValidate="edit_NomCrt"
                                            ErrorMessage="La abreviatura de la variable es requerida." Text="*">*</asp:RequiredFieldValidator>&nbsp;
                                        <asp:regularexpressionvalidator id="revNomCor" runat="server" CssClass="error" ForeColor=" " ValidationExpression="[^<>{}[\]|'%&amp;+\*]*"
                                            ControlToValidate="edit_NomCrt" Display="Dynamic">*</asp:regularexpressionvalidator>&nbsp;
                                    </EditItemTemplate>
                                </asp:TemplateColumn>
                                <asp:TemplateColumn SortExpression="NomLrgVar" HeaderText="Nombre">
                                    <HeaderStyle Font-Bold="True" CssClass="ltr"></HeaderStyle>
                                    <ItemStyle Width="40%"></ItemStyle>
                                    <ItemTemplate>
                                        <asp:Label id=LblLrg runat="server" Font-Size="8" Text='<%# DataBinder.Eval(Container.DataItem, "NomLrgVar") %>'>
                                        </asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <asp:TextBox id=edit_NomLrg runat="server" Font-Size="8" Columns="40" Text='<%# DataBinder.Eval(Container.DataItem, "NomLrgVar") %>' MaxLength="40">
                                        </asp:TextBox>
                                        <asp:regularexpressionvalidator id="revNomLar" runat="server" CssClass="error" ForeColor=" " ValidationExpression="[^<>{}[\]|'%&amp;+\*]*"
                                            ControlToValidate="edit_NomLrg" Display="Dynamic">*</asp:regularexpressionvalidator>
                                        <asp:RequiredFieldValidator id="rfvNomLar" CssClass="error" Runat="server" ForeColor=" " ControlToValidate="edit_NomLrg"
                                            ErrorMessage="El nombre de la variable es requerido." Display="Dynamic" Text="*">*</asp:RequiredFieldValidator>
                                    </EditItemTemplate>
                                </asp:TemplateColumn>
                                <asp:TemplateColumn SortExpression="CveUniMed" HeaderText="Unidad de medida">
                                    <HeaderStyle Font-Bold="True" CssClass="ltr"></HeaderStyle>
                                    <ItemStyle HorizontalAlign="Center" Width="20%"></ItemStyle>
                                    <ItemTemplate>
                                        <asp:Label id=LblUniMed runat="server" Font-Size="8" Text='<%# DataBinder.Eval(Container.DataItem, "NomUniMed") %>'>
                                        </asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <asp:DropDownList id=edit_UniMed runat="server" Width="120px" Font-Size="8" DataSource="<%#GetUniMed()%>" DataTextField="NomUniMed" DataValueField="CveUniMed" SelectedIndex='<%# GetSelIndexUniMed(Container.DataItem("CveUniMed")) %>' Enabled="true">
                                        </asp:DropDownList>
                                        <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" CssClass="error" ForeColor=" " ControlToValidate="edit_UniMed"
                                            ErrorMessage="Falta seleccionar la Unidad de Medida">*</asp:RequiredFieldValidator>
                                    </EditItemTemplate>
                                </asp:TemplateColumn>
                                <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Guardar   " CancelText="Cancelar" EditText="Editar">
                                    <ItemStyle Font-Size="8pt" Wrap="False" Width="20%"></ItemStyle>
                                </asp:EditCommandColumn>
                            </Columns>
                            <PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#F7F7DE" Mode="NumericPages"></PagerStyle>
                        </asp:datagrid>
En resumen mi Datagrid es este:
id="GrdVar"
OnUpdateCommand="Grd_Update"
OnCancelCommand="Grd_Cancel"
OnEditCommand="Grd_Edit"
AutoGenerateColumns="False"
DataKeyField="CveEntVar"

Continuo, ahora lo ke kiero es que al dar click en ACTUALIZAR me pase a la donde los registros estan incompletos por supuesto ke el datagrid este en modo edicion para editar los datos que faltan.

Y eso es exactamente lo que no se como hacer, porke al kererle pasar la clave que traigo de la BD, me di cuenta que no es la misma ke usa el datagrid, y es ahi donde me estoy atorando.

Bueno mi evento para capturar la fila que voy a editar es:

Código:
'Procedimiento del Grid para Editar el item seleccionado
 Public Sub Grd_Edit(ByVal Sender As Object, ByVal E As DataGridCommandEventArgs)
        Dim iItemEdit As Integer
        iItemEdit = CInt(E.Item.ItemIndex)
        '''''iItemEdit = CInt(GrdVar.DataKeys(iItemEdit))
        GrdVar.EditItemIndex = iItemEdit
        BindGrid()
    End Sub
Y bueno quisiera ke me ayudaran con esto, miren lo intentaba hacer con este codigo, pero no funciona:

Código:
 'Obtiene las variables insertadas para el indicador
                Dim DVVariables As DataView
                Dim banderror As Boolean
                Dim i, numVar, CveEntVar As Integer
                DVVariables = Buss.GetVariables(CveInd)
                If IsNothing(DVVariables) Then
                    Response.Redirect("WebError.aspx?iErr=GetVariables")
                ElseIf DVVariables.Table.Rows.Count <= 0 Then
                    Response.Redirect("WebError.aspx?iErr=GetVariablesND")
                Else
                    numVar = DVVariables.Table.Rows.Count

                    'Verifica que el nombre corto y largo de la variable no esten vacios
                    For i = 0 To (numVar - 1)
                        sNomCrt = Trim(DVVariables.Table.Rows(i).Item("NomCrtVar"))
                        sNomLrg = Trim(DVVariables.Table.Rows(i).Item("NomLrgVar"))
                        CveEntVar = CInt(DVVariables.Table.Rows(i).Item("CveEntVar"))
                        'Si existe algun error hacemos ke edite ese item
                        If sNomCrt.Equals("") Or sNomLrg.Equals("") Then
                            '''''Dim iItemEdit As Integer
                            '''''iItemEdit = CInt(E.Item.ItemIndex)
                            '''''GrdVar.EditItemIndex = CInt(GrdVar.DataKeys(iItemEdit))
                            GrdVar.EditItemIndex = CveEntVar
                            GrdVar.DataSource = dVVar
                            GrdVar.DataBind()                            
                        End If
                    Next
                End If
Bueno en resumen: como hacer que mi datagrid se establezca en modo edicion en una fila determinada (esta fila depende de la clave que obtengo de la BD).

Gracias
  #2 (permalink)  
Antiguo 25/09/2007, 19:13
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 1 mes
Puntos: 7
Re: En un datagrid, al finalizar la edicion de una fila me pase a otra fila determina

En tu DataKey del Grid debes poner los campos del primary key.
__________________
.::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--
  #3 (permalink)  
Antiguo 28/09/2007, 10:38
Avatar de krakxp  
Fecha de Ingreso: junio-2006
Ubicación: NA
Mensajes: 105
Antigüedad: 17 años, 10 meses
Puntos: 0
De acuerdo Solucion al cambio entre filas en un DataGrid

Hola comunidad aki esta la solucion para el problema ke tenia, y bueno asi lo resolvi, si alguine tien alguna observacion a mi codigo porfavor diganmelo:

Código:
'Procedimiento del Grid para Actualizar los datos de las variables 
    Public Sub Grd_Update(ByVal Sender As Object, ByVal E As DataGridCommandEventArgs)
        If Page.IsValid Then
            Dim sNomCrt, sNomLrg, iCveVar As String
            Dim iUniMed As Integer
            Dim bGuaVar As Boolean
            Dim TxtNomCrt, TxtNomLrg As TextBox             'Nombre Corto y Largo de la Variable
            Dim cUniMed As DropDownList                     'Unidad de Medida
            Dim lblCrt, lblLrg As Label


            iCveVar = GrdVar.DataKeys(CInt(E.Item.ItemIndex))
            bGuaVar = False

            TxtNomCrt = E.Item.FindControl("edit_NomCrt")
            sNomCrt = Trim("" & TxtNomCrt.Text)

            TxtNomLrg = E.Item.FindControl("edit_NomLrg")
            sNomLrg = Trim("" & TxtNomLrg.Text)

            cUniMed = E.Item.FindControl("edit_UniMed")
            iUniMed = Val(0 & cUniMed.SelectedItem.Value)


            If Not (sNomCrt.Equals("") Or sNomLrg.Equals("")) Then
                bGuaVar = Buss.GuardarVar(iCveVar, sNomCrt, sNomLrg, iUniMed)
                If bGuaVar = True Then
                    'Obtiene las variables insertadas para el indicador
                    Dim DVVariables As DataView
                    Dim banderror As Boolean
                    Dim i, numVar, CveEntVar As Integer
                    DVVariables = Buss.GetVariables(CveInd)
                    If IsNothing(DVVariables) Then
                        Response.Redirect("WebError.aspx?iErr=GetVariables")
                    ElseIf DVVariables.Table.Rows.Count <= 0 Then
                        Response.Redirect("WebError.aspx?iErr=GetVariablesND")
                    Else
                        Dim item As DataGridItem
                        Dim cellCvePer, cellNomCrt, cellNomLar As TableCell
                        Dim iCvePer As Integer
                        Dim bActPer As Boolean

                        For Each item In GrdVar.Items
                            If Not item.ItemIndex = GrdVar.EditItemIndex Then
                                cellCvePer = item.Cells(0)
                                iCvePer = CInt(cellCvePer.Text)
                                lblCrt = item.FindControl("LblCrt")
                                sNomCrt = lblCrt.Text.Trim()
                                lblLrg = item.FindControl("LblLrg")
                                sNomLrg = lblLrg.Text.Trim()

                                If sNomCrt.Equals("") Or sNomLrg.Equals("") Then
                                    GrdVar.EditItemIndex = item.ItemIndex
                                    Exit For
                                End If
                            End If
                        Next
                        GrdVar.EditItemIndex = -1
                        BindGrid()
                    End If
                Else
                    Response.Redirect("WebError.aspx?iErr=GuardarVar")
                End If
            End If
        End If
    End Sub

Última edición por krakxp; 28/09/2007 a las 10:42 Razón: kiero tambien modificar el titulo y no puedo
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 14:00.