none
Al recorrer el gridview, no considera todas las row que existen y por lo tanto en las ultimas row no hace lo que si hace en el resto. RRS feed

  • Pregunta

  • Hola a todos, espero que estén bien y me gustaría explicar con mas detalle mi inconveniente.

    Tengo una grilla, que agregue una funcionalidad que encontré de crear filas entremedio de la información para poder agrupar estás.

    Lo que funciona de maravilla, por ejemplo si la grilla originalmente vienen 3 registros, con esta función creo dos filas para poder agruparlas según corresponda, entonces la grilla tiene 5 filas, pero cuando utilizo la función de recorrer grilla para obtener la información, o para ir guardando etc. me toma las primeras 3 filas, es decir la primera fila que se creo para agrupar los primeros dos registro y los dos registros siguiente, pero la segunda fila que se creo y el ultimo registro, no los encuentra porque dice que no existen.

    La función , encontrada y modificada que agrupa.

        Dim strPreviousRowID As String = String.Empty
        Dim intSubTotalIndex As Integer = 1
        Protected Sub grdViewOrders_RowCreated(sender As Object, e As GridViewRowEventArgs)
            Dim IsSubTotalRowNeedToAdd As Boolean = False
            Dim IsGrandTotalRowNeedtoAdd As Boolean = False
    
            If (strPreviousRowID <> String.Empty) AndAlso (DataBinder.Eval(e.Row.DataItem, "Description_Area") IsNot Nothing) Then
                If strPreviousRowID <> DataBinder.Eval(e.Row.DataItem, "Description_Area").ToString() Then
                    IsSubTotalRowNeedToAdd = True
                End If
                If (strPreviousRowID <> String.Empty) AndAlso (DataBinder.Eval(e.Row.DataItem, "Description_Area") = Nothing) Then
                    IsSubTotalRowNeedToAdd = True
                    IsGrandTotalRowNeedtoAdd = True
                    intSubTotalIndex = 0
    
                End If
    
            End If
    
            '#region Inserting first Row and populating fist Group Header details
            If (strPreviousRowID = String.Empty) AndAlso (DataBinder.Eval(e.Row.DataItem, "Description_Area") IsNot Nothing) Then
                Dim grdViewOrders As GridView = CType(sender, GridView)
                Dim row As New GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert)
                Dim cell As New TableCell()
                cell.Text = "Área : " & DataBinder.Eval(e.Row.DataItem, "Description_Area").ToString()
                cell.ColumnSpan = 5
    
                cell.CssClass = "GroupHeaderStyle"
                row.Cells.Add(cell)
                grdViewOrders.Controls(0).Controls.AddAt(e.Row.RowIndex + intSubTotalIndex, row)
                intSubTotalIndex = intSubTotalIndex + 1
    
            End If
            If (IsSubTotalRowNeedToAdd) Then
                If (DataBinder.Eval(e.Row.DataItem, "Description_Area") IsNot Nothing) Then
                    Dim grdViewOrders As GridView = CType(sender, GridView)
                    Dim row As New GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert)
                    Dim cell As New TableCell()
                    cell.Text = "Área : " & DataBinder.Eval(e.Row.DataItem, "Description_Area").ToString()
                    cell.ColumnSpan = 5
    
                    cell.CssClass = "GroupHeaderStyle"
                    row.Cells.Add(cell)
                    grdViewOrders.Controls(0).Controls.AddAt(e.Row.RowIndex + intSubTotalIndex, row)
                    intSubTotalIndex = intSubTotalIndex + 1
                End If
    
            End If
            '#End Region
    
        End Sub
    
    
    
        Private Sub BuscadorRegistro1_Busca_Click(ByVal Id_Lista_Curso As Integer, ByVal Id_Curso As Integer) Handles BuscadorAlumnos1.Buscar_clic
            Session("Id_ListaCurso") = Id_Lista_Curso
            Session("Id_Curso") = Id_Curso
         
    
        End Sub
        Protected Sub grdViewOrders_RowDataBound(sender As Object, e As GridViewRowEventArgs)
            ' This is for cumulating the values
    
            If e.Row.RowType = DataControlRowType.DataRow Then
                strPreviousRowID = DataBinder.Eval(e.Row.DataItem, "Description_Area").ToString()
    
    
                Dim Drop_Escala As DropDownList = CType(e.Row.FindControl("Drop_Escala"), DropDownList)
                Drop_Escala.SelectedValue = DataBinder.Eval(e.Row.DataItem, "Id_Escala_Valor").ToString()
                Dim id_evaluacion As String = DataBinder.Eval(e.Row.DataItem, "Id_Evaluacion_Desarrollo").ToString()
                Dim id_concepto As String = DataBinder.Eval(e.Row.DataItem, "Id_ConceptoArea").ToString()
                If id_evaluacion = "" Then
                    id_evaluacion = "0"
                End If
              
            End If

    La función que recorre

    Protected Sub Btn_Guardar_Click(sender As Object, e As ImageClickEventArgs) Handles Btn_Guardar.Click
            Dim count As Integer = 0
          
            For Each row As GridViewRow In GridView1.Rows
                If row.Cells(3).Text <> "" Then
                    Try
    
                        Dim id_evaluacion As Integer
                        Try
                            id_evaluacion = CInt(row.Cells(0).Text)
                        Catch ex As Exception
                            id_evaluacion = 0
                        End Try
    
                        Dim id_concepto As Integer = CInt(row.Cells(2).Text)
                        Dim Drop_Escala As DropDownList = CType(row.FindControl("Drop_Escala"), DropDownList)
    
                        If Insert(id_evaluacion, id_concepto, Drop_Escala.SelectedValue, Drop_Periodo.SelectedValue) Then
    
                        Else
                            count = count + 1
                        End If
    
                    Catch ex As Exception
    
                    End Try
    
                End If
            Next
    
            GridView1.DataBind()
        End Sub

    LA grilla en sí.

                       <asp:GridView ID="GridView1" runat="server"    CssClass="mGrid" OnRowDataBound="grdViewOrders_RowDataBound" DataKeyNames="Id_ConceptoArea" OnRowCreated="grdViewOrders_RowCreated" AutoGenerateColumns="False" CellPadding="5" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None" Width="900px">
                                            <AlternatingRowStyle BackColor="White" />
    
                                            <Columns>
                                                <asp:BoundField DataField="Id_Evaluacion_Desarrollo" >
                                                    <ItemStyle CssClass="hidden"  />
                                                    <HeaderStyle  CssClass="hidden" />
                                                    <FooterStyle   CssClass="hidden"/>
                                                    <ControlStyle  CssClass="hidden" />
                                                    </asp:BoundField>
                                                <asp:BoundField DataField="Id_Escala_Valor" >
                                                    <ItemStyle CssClass="hidden"  />
                                                    <HeaderStyle  CssClass="hidden" />
                                                    <FooterStyle   CssClass="hidden"/>
                                                    <ControlStyle  CssClass="hidden" />
                                                    </asp:BoundField>
                                                 <asp:BoundField DataField="Id_ConceptoArea" >
                                                    <ItemStyle CssClass="hidden"  />
                                                    <HeaderStyle  CssClass="hidden" />
                                                    <FooterStyle   CssClass="hidden"/>
                                                    <ControlStyle  CssClass="hidden" />
                                                    </asp:BoundField>
                                                
                                                <asp:BoundField DataField="NomConcepto" ItemStyle-ForeColor="Black"  ItemStyle-Width="600px" />
                                                <asp:TemplateField ItemStyle-Width="150px">
                                                    <ItemTemplate>
                                                        <asp:DropDownList ID="Drop_Escala" CssClass="listado" runat="server" DataSourceID="SqlDataSourceEscalaConducta"  DataTextField="NomEscala" DataValueField="Id_Escala" Width="130px" AppendDataBoundItems="True"  >
                                                        <asp:ListItem Value="0">Seleccione</asp:ListItem>
                                                        </asp:DropDownList>
                                                        <asp:SqlDataSource ID="SqlDataSourceEscalaConducta" runat="server" ConnectionString="<%$ ConnectionStrings:BookClass %>" SelectCommand="MAN_Select_Escala_Conducta" SelectCommandType="StoredProcedure">
                                                            <SelectParameters>
                                                                <asp:SessionParameter Name="id_colegio" SessionField="Id_Colegio" Type="Int32" />
                                                            </SelectParameters>
                                                        </asp:SqlDataSource>
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                            </Columns>
    
                                  <EditRowStyle BackColor="#D7D7D7" />
                                            <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                                            <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                                            <PagerStyle BackColor="#D7D7D7" ForeColor="White" HorizontalAlign="Center" />
                                            <RowStyle BackColor="#EFF3FB" />
                                            <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                                            <SortedAscendingCellStyle BackColor="#F5F7FB" />
                                            <SortedAscendingHeaderStyle BackColor="#6D95E1" />
                                            <SortedDescendingCellStyle BackColor="#E9EBEF" />
                                            <SortedDescendingHeaderStyle BackColor="#4870BE" />
                            </asp:GridView>

    Saludos y agradeceria la ayuda.

    domingo, 18 de octubre de 2015 13:43