Delmonte
Delmonte

Reputation: 411

Declare events of gridviewSecond which is inside gridviewFirst

have two gridviews. GridViewSecond is inside GridViewFirst. In code behind, how to declare events of GridViewSecond like PreRender, RowCommand, etc.?

My two gridviews:

<asp:GridView ID="GridViewFirst" runat="server"
    OnRowDataBound="OnRowDataBound">
    <Columns>
        <asp:BoundField DataField="Des_Cargo" HeaderText="Cargo">
        </asp:BoundField>
        <asp:TemplateField>
            <ItemTemplate>
                <tr>
                    <td colspan="10">
                        <div id="div<%# Eval("Cod_Correl") %>" style="display: none; position: relative;" >
                            <asp:GridView ID="GridViewSecond" runat="server"
                                OnRowDataBound="GridViewSecond_RowDataBound"
                                OnRowCommand="GridViewSecond_RowCommand"
                                OnPreRender="GridViewSecond_PreRender">
                                <Columns>

                                    <asp:BoundField HeaderText="Cod_Cargo" DataField="Cod_Cargo" ItemStyle-HorizontalAlign="Left"
                                        Visible="false">
                                        <ItemStyle HorizontalAlign="center" BorderColor="#CFCFCF" BorderWidth="1px"></ItemStyle>
                                        <HeaderStyle CssClass="fondo-head-grid" />
                                    </asp:BoundField>

                                    <asp:TemplateField HeaderText="Fecha de Carga" HeaderStyle-HorizontalAlign="Center"  ItemStyle-HorizontalAlign="Center">
                                        <EditItemTemplate>
                                            <asp:TextBox ID="txtFec_Carga" runat="server" Text='<%# Eval("Fec_Carga","{0:dd/MM/yyyy}") %>'></asp:TextBox>
                                        </EditItemTemplate>
                                        <FooterTemplate>
                                            <asp:TextBox ID="txtNewFec_Carga" runat="server"></asp:TextBox>
                                        </FooterTemplate>
                                        <ItemTemplate>
                                            <asp:Label ID="lblFec_Carga" runat="server" Text='<%# Eval("Fec_Carga","{0:dd/MM/yyyy}") %>'></asp:Label>
                                        </ItemTemplate>
                                    </asp:TemplateField>

                                    <asp:TemplateField HeaderText="" ShowHeader="False" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center">
                                        <EditItemTemplate>
                                            <asp:LinkButton ID="lbkUpdate" runat="server" CausesValidation="True" CommandName="Update"
                                                Text="Update"></asp:LinkButton>
                                            <asp:LinkButton ID="lnkCancel" runat="server" CausesValidation="False" CommandName="Cancel"
                                                Text="Cancel"></asp:LinkButton>
                                        </EditItemTemplate>
                                        <FooterTemplate>
                                            <asp:LinkButton ID="lnkAdd" runat="server" CausesValidation="False" CommandName="Insert"
                                                Text="Insertar"></asp:LinkButton>
                                        </FooterTemplate>
                                        <ItemTemplate>
                                            <asp:LinkButton ID="lnkEdit" runat="server" CausesValidation="False" CommandName="Edit"
                                                Text="Editar"></asp:LinkButton>
                                        </ItemTemplate>
                                    </asp:TemplateField>

                                    <asp:TemplateField ShowHeader="False">
                                        <ItemTemplate>
                                            <asp:LinkButton ID="lbkDelete" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete"></asp:LinkButton>
                                        </ItemTemplate>
                                    </asp:TemplateField>


                                </Columns>
                            </asp:GridView>
                        </div>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

I can invoke GridViewSecond in this way:

Protected Sub GridViewFirst_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    Dim oBL_Resolucion As New BL_Resolucion

    If e.Row.RowType = DataControlRowType.DataRow Then

        If e.Row.DataItem Is Nothing Then
            Return
        End If

        Dim GridViewSecond As GridView = DirectCast(e.Row.FindControl("gvwResolDetalle"), GridView)

        Dim lblOrden As Label = DirectCast(e.Row.FindControl("lblOrden"), Label)

        GridViewSecond.DataSource = oBL_Resolucion.Listar(_Cod_OP.ToString, lblOrden.Text)
        GridViewSecond.DataBind()
    End If
End Sub

But can't declare GridViewSecond events like this:

Protected Sub GridViewSecond_PreRender(sender As Object, e As EventArgs)                                   
    Dim count As Integer = GridViewSecond.Rows.Count                                           

    For i As Integer = 0 To count - 1                                                          
        Dim row As GridViewRow = GridViewSecond.Rows(i)                                        

        If row.RowType = DataControlRowType.DataRow Then                                       
            Dim lbtnEdit As LinkButton = DirectCast(row.FindControl("lnkEdit"), LinkButton)    

            If lbtnEdit IsNot Nothing Then                                                     
                lbtnEdit.Visible = False                                                       
            End If                                                                             

            Dim lbtnDelete As LinkButton = DirectCast(row.FindControl("lbkDelete"), LinkButton)
            If lbtnDelete IsNot Nothing Then                                                   
                lbtnDelete.Visible = False                                                     
            End If                                                                             
        End If                                                                                 
    Next                                                                                       
End Sub                                                                          

It shows error like: "GridViewSecond is not declared."

Upvotes: 0

Views: 37

Answers (1)

dario
dario

Reputation: 5269

Instead of this:

Dim count As Integer = GridViewSecond.Rows.Count

You can use the sender, which is actually the GridView:

Dim gv As GridView
gv = DirectCast(sender, GridView)

Dim count As Integer = gv.Rows.Count

Upvotes: 1

Related Questions