none
ERRO Accordion1.FindControl RRS feed

  • Pergunta

  • Oi pessoal,

     

    Estou c/ o seguinte problema. Estou tentando carregar uma galeria de fotos em flash dentro de dum accordion, mas está dando um erro que não consigo resolver.

     

    Aqui vai o código

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

    Dim myDV As DataView

    myDV = CreateDataSource()

    Accordion1.DataSource = myDV

    Accordion1.DataBind()

    End Sub

    Function CreateDataSource()

    Dim dataini As Date = Request.QueryString("Dia")

    Dim datainiformatada As String = Format(dataini, "yyyy-MM-dd HH:mmTongue Tieds")

    Dim myConnection As New SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)

     

    Dim strSqlEV As String = "SELECT [ID_EVENTO], [TITULO_EVENTO], [RESUMO_EVENTO], [IMAGEM_EVENTO], [DESCRICAO_EVENTO], [ID_ALBUM] FROM [EVENTOS] "

    Dim drEV As SqlDataReader

    Dim cmdEV As New SqlCommand(strSqlEV, myConnection)

    myConnection.Open()

    drEV = cmdEV.ExecuteReader()

    Dim myDataTable As New DataTable

    Dim myDataRow As DataRow

    Dim myDataView As DataView

    myDataTable.Columns.Add(New DataColumn("ID_EVENTO", System.Type.GetType("System.String")))

    myDataTable.Columns.Add(New DataColumn("IMAGEM_EVENTO", System.Type.GetType("System.String")))

    myDataTable.Columns.Add(New DataColumn("TITULO_EVENTO", System.Type.GetType("System.String")))

    myDataTable.Columns.Add(New DataColumn("RESUMO_EVENTO", System.Type.GetType("System.String")))

    myDataTable.Columns.Add(New DataColumn("DESCRICAO_EVENTO", System.Type.GetType("System.String")))

    While drEV.Read()

    myDataRow = myDataTable.NewRow

    myDataRow(0) = drEV("ID_EVENTO")

    If Not (IsDBNull(drEV("IMAGEM_EVENTO"))) Then

    myDataRow(1) = drEV("IMAGEM_EVENTO")

    Else

    myDataRow(1) = "transparente.gif"

    End If

    myDataRow(2) = drEV("TITULO_EVENTO")

    myDataRow(3) = drEV("RESUMO_EVENTO")

    myDataRow(4) = drEV("DESCRICAO_EVENTO")

    myDataTable.Rows.Add(myDataRow)

    If Not (IsDBNull(drEV("ID_ALBUM"))) Then

    Dim strSqlAlbum As String

    Dim drAlbum As SqlDataReader

    Dim cmdAlbum As SqlCommand

    Dim imagename As String

    Dim imagepath As String

    strSqlAlbum = "SELECT [ID_FOTO], [FILENAME_FOTO], [ID_ALBUM], [DESC_FOTO] FROM [Fotos] WHERE ([ID_ALBUM] =" & drEV("ID_ALBUM") & ") ORDER BY [ID_FOTO] DESC"

    cmdAlbum = New SqlCommand(strSqlAlbum, myConnection2)

    myConnection.Open()

    drAlbum = cmdAlbum.ExecuteReader()

    Dim EFG1 As epicFlashGallery

    ' --------------------------------------------------------------------------------------------------------------------------------

    ' Aqui faço o findcontrol e parece estar tudo OK

    ' --------------------------------------------------------------------------------------------------------------------------------

    EFG1 = CType(Accordion1.FindControl("FlashGallery"), epicFlashGallery)

    ' --------------------------------------------------------------------------------------------------------------------------------

    While drAlbum.Read()

    EFG1.DeleteTempFiles()

    imagepath = "FotoAlbuns/album" & drAlbum("ID_ALBUM") & "/_Flash/"

    EFG1.GalleryBaseDir = imagepath

    EFG1.GallerySupportDirectory = imagepath

    EFG1.GalleryName = "Álbum" & drAlbum("ID_ALBUM")

    EFG1.OpenFull = True

    EFG1.ImageBgColor = "#f9f9f9"

    EFG1.FlashPlayerDetection = True

    imagename = drAlbum("FILENAME_FOTO")

    EFG1.GalleryImages.Add(imagename)

    End While

    EFG1.Visible = True

    myConnection.Close()

    End If

    End While

    ' --------------------------------------------------------------------------------------------------------------------------------

    ' Aqui dá o erro: Object reference not set to an instance of an object 
      ' --------------------------------------------------------------------------------------------------------------------------------

    myDataView = New DataView(myDataTable)

    ' --------------------------------------------------------------------------------------------------------------------------------

    CreateDataSource = myDataView

    End Function

    </script>

    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">

    <asp:ScriptManager id="ScriptManager1" runat="server">

    </asp:ScriptManager>

    <ajaxToolKit:Accordion ID="Accordion1" runat="server" FadeTransitions="true" FramesPerSecond="40"

    TransitionDuration="250" HeaderCssClass="accordionHeader" ContentCssClass="accordionContent"

    SelectedIndex="-1" AutoSize="None">

    <HeaderTemplate>

    <a href="" onclick="return false;" class="titulo_conteudo">

    <%# DataBinder.Eval(Container.DataItem, "TITULO_EVENTO") %>

    </a>

    </HeaderTemplate>

    <ContentTemplate>

    <%# DataBinder.Eval(Container.DataItem, "DESCRICAO_EVENTO") %>

    <br />

    ' --------------------------------------------------------------------------------------------------------------------------------

    ' aqui está o o control que carrega o flash

    ' --------------------------------------------------------------------------------------------------------------------------------

    <cc1:epicFlashGallery ID="FlashGallery" runat="server" FlashPlayerDetection="true"

    ImageRegenerateOnRebuild="true" ScanDirectory="false" Height="500" OpenFull="false"

    Visible="false">

    </cc1:epicFlashGallery>

    ' --------------------------------------------------------------------------------------------------------------------------------

    </ContentTemplate>

    </ajaxToolKit:Accordion>

    </asp:Content>

     

     

    Obrigado pela ajuda!

    Cristóvão

     

    segunda-feira, 23 de abril de 2007 15:56

Todas as Respostas

  • Oi !

     

    O FindControl tipicamente não resulta em erro, apenas gera exatamente esta mensagem quando você vai usar o elemento, caso ele não tenha encontrado.

     

    O FindControl não é recursivo. Ou seja : Se abaixo do Acordion1 você possuir vários containers, ele não vai achar o que você deseja.

     

    Veja uma solução para isso em http://www.bufaloinfo.com.br/dicas.asp?cod=810

     

    []'s

     

    terça-feira, 24 de abril de 2007 11:54