Reputation: 411
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
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