ASP.NET: Impedindo que o Gridview faça DataBind automaticamente
Já passamos por vários situações no desenvolvimento em ASP.NET onde tínhamos um GridView vinculado a um ObjectDataSource, mas queríamos que o GridView executasse o DataBind apenas depois que um botão "Pesquisar" tivesse sido pressionado pelo menos uma vez.
Em grande parte das situações, deixar o GridView invisível (declarando-o com visible="false") é suficiente para obter o efeito desejado, bastando para isso incluir no evento Click do botão uma instrução para tornar o grid visível.
No entanto, existem casos onde isso não é suficiente. Um exemplo é quando o GridView em questão está dentro de um UserControl (componente .ascx) e esse UserControl é inserido dentro de uma das colunas de outro GridView. Nesta situação, o DataBind do GridView dentro do UserControl vai ser executado uma vez para cada linha que contiver o GridView pai.
Um recurso que usamos neste caso, é fazer um override do método DataBindChildren() do UserControl:
Protected Overrides Sub DataBindChildren()
If Me.pnlMain.Visible Then
MyBase.DataBindChildren()
End If
End Sub
Basta colocar uma condição que impeça que MyBase.DataBindChildren() seja executado em qualquer situação. Neste caso, estamos fazendo com que os DataBinds sejam executados apenas se um componente chamado "pnlMain" esteja visível. No evento Click do botão "Pesquisar", incluímos um código do tipo "pnlMain.Visible = True" e o UserControl passa a funcionar exatamente como o esperado.
