none
User Control receber valor do banco de dados RRS feed

  • Pergunta

  • Tenho um User Control com uma propriedade personalizada chamada "IdPerfil", onde ele passa para que um sqldatasource seja atualizado. Acontece que com texto funciona bem, quando é valor do banco de dados não vai.

    escorts.ascx.vb

    Public id_perfildestaque As String = String.Empty
        
       Public Property IdPerfil() As [String]
            Get
                Return id_perfildestaque
            End Get
            Private Set(ByVal value As [String])
                id_perfildestaque = value
            End Set
        End Property
    
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
            escort_perfil.SelectCommandType = SqlDataSourceCommandType.Text
            escort_perfil.SelectCommand = "Select * from escort_perfil where status = 'true' and id='" & Me.IdPerfil & "'  limit 1"
    
    
        End Sub


    Default.aspx

    <asp:SqlDataSource 
                    
                    ID="escort_destaque" 
                    runat="server" 
                    ConnectionString="<%$ ConnectionStrings:xbd %>" 
                    ProviderName="<%$ ConnectionStrings:xbd.ProviderName %>" 
                    SelectCommand="SELECT * from escort_destaque where status='true' order by posicao asc">
    
    </asp:SqlDataSource> 
        
        <asp:Repeater ID="Repeater1" runat="server" DataSourceID="escort_destaque">
        <ItemTemplate >
        
             <!-- Bloco 1--> 
             <div  class="blocofotos">
    <!-- Este funciona -->          
    <!-- <uc1:escorts ID="escorts1" idperfil="2"  runat="server" />-->  
             <uc1:escorts ID="escorts1" idperfil='<%#eval("id_perfil") %>'  runat="server" />
             <div class="clear"></div>
             </div>
             <!--/Bloco1-->
        
        
        </ItemTemplate>
        </asp:Repeater>

    Basicamente é isto, passar o valor do bd para ser recuperado dentro do user control.


    Alebarros

    quinta-feira, 8 de março de 2012 21:18

Respostas

  • Fernando obrigado pela ajuda, mesmo colocando como foi sugerido  <Bindable(True), Localizable(True), Category("Banco de dados")> _ , continuava sem apresentar os dados.  A resposta no final foi simples, eu estava carregando os dados no Page Load e na verdade tem que ser no Pre_Render.

    Código Final

    Private id_perfildestaque As String = String.Empty
    
        <Bindable(True), Localizable(True), Category("Banco de dados")> _
        Public Property IdPerfil() As String
            Get
                Return Me.id_perfildestaque
    
            End Get
            Set(ByVal value As String)
                Me.id_perfildestaque = value
            End Set
        End Property
    
    
        Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
            escort_perfil.SelectCommandType = SqlDataSourceCommandType.Text
            escort_perfil.SelectCommand = "Select * from escort_perfil where status = 'true' and id='" & id_perfildestaque & "'  limit 1"
    
        End Sub

    Obrigado

    segunda-feira, 12 de março de 2012 16:08

Todas as Respostas

  • Olá Alessandro,

    O nome do campo realmente é "id_perfil"?

    Já verificou se o banco esta retornando mais de um registro?

    Reparei que o seu DataSourceId  esta como "escort_destaque" no HTML mas como "escort_perfil" no código VB.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    domingo, 11 de março de 2012 13:13
    Moderador
  • Olá Fernando,

    Na página default.aspx tem um SQLdatasource (escort_destaque) que recupera o campo o valor do campo id_perfil da tabela destaque. Abaixo um repeater para mandar o valor deste id_perfil para o UserControl. Com base neste id_perfil o UserControl seleciona o perfil pretendido no SqlDatasource escort_perfil.

    segunda-feira, 12 de março de 2012 10:52
  • Olá Ale,

    Eu proponho o seguinte teste:

    <asp:SqlDataSource 
                    
                    ID="escort_destaque" 
                    runat="server" 
                    ConnectionString="<%$ ConnectionStrings:xbd %>" 
                    ProviderName="<%$ ConnectionStrings:xbd.ProviderName %>" 
                    SelectCommand="SELECT * from escort_destaque where status='true' order by posicao asc">
    
    </asp:SqlDataSource> 
        
    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="escort_destaque">
    <ItemTemplate >
    
    <b> <%# Eval("id_perfil") %> </b> <br/>
        
    </ItemTemplate>
    </asp:Repeater>

    Vamos ver se os códigos são renderizados corretamente :)

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    segunda-feira, 12 de março de 2012 11:53
    Moderador
  • Fernando, funciona perfeitamente, já havia feito este teste, renderiza normalmente, mas para o UserControl não vai, se coloco um valor estático vai normalmente.
    segunda-feira, 12 de março de 2012 12:13
  • Olá Alessandro,

    Sua propriedade "idperfil" habilidada para bind através da tag to atributo [System.ComponentModel.Bindable(true)]?

    [System.ComponentModel.Bindable(true)] 

    referência:

    http://support.microsoft.com/kb/327413

    []s!



    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    segunda-feira, 12 de março de 2012 13:11
    Moderador
  • Fernando obrigado pela ajuda, mesmo colocando como foi sugerido  <Bindable(True), Localizable(True), Category("Banco de dados")> _ , continuava sem apresentar os dados.  A resposta no final foi simples, eu estava carregando os dados no Page Load e na verdade tem que ser no Pre_Render.

    Código Final

    Private id_perfildestaque As String = String.Empty
    
        <Bindable(True), Localizable(True), Category("Banco de dados")> _
        Public Property IdPerfil() As String
            Get
                Return Me.id_perfildestaque
    
            End Get
            Set(ByVal value As String)
                Me.id_perfildestaque = value
            End Set
        End Property
    
    
        Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
            escort_perfil.SelectCommandType = SqlDataSourceCommandType.Text
            escort_perfil.SelectCommand = "Select * from escort_perfil where status = 'true' and id='" & id_perfildestaque & "'  limit 1"
    
        End Sub

    Obrigado

    segunda-feira, 12 de março de 2012 16:08