Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 496659
            [titulo] => Paginacao no DataList
            [dataCadastro] => DateTime Object
                (
                    [date] => 2014-10-04 14:15:19
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 232232
            [status] => A
            [isExample] => 
            [NomeUsuario] => Joel Rodrigues
            [Apelido] => 
            [Foto] => 232232_20161017163010.jpg
            [Conteudo] => Amigo, o código que está entre as linhas 14 e 28 pode ser reduzido para o seguinte:
[code]if (((Label)e.Item.FindControl("lblProfissional")).Text != null)
{
((Image)e.Item.FindControl("imgServ")).ImageUrl = "~/images/"+((Label)e.Item.FindControl("lblProfissional")).Text+".jpg";
}[/code]
Substitua aí, por favor, e veja se funciona. Não resolve seu problema, mas já limpa um pouco o código. ) )

Paginacao no DataList

Delivery-ti
|
MVP
Pontos: 525
    26 ago 2014

Ola galera estou tentando criar uma paginacao no datalist para limitar o tamanho da pagina porem estou tentando fazer a paginacao e nao esta dando certo da este erro:
Não é possível converter um objeto do tipo 'System.Data.DataRowView' no tipo 'maos.DAO.SERVICO'.

nesta linha: #Código

   ((Label)e.Item.FindControl("lblProfissional")).Text = ((SERVICO)e.Item.DataItem).TIPOPROFISSIONAL.descTipoProf; 

Minha oaginação esta assim o codigo galera mas nao sei o que esta errado.
#Código
   //paginacao do datalist
        protected void ListarDados(string tipo)
        {
            int tamPagina = 5;
            int regInicio = 0;

            if (ViewState["regInicio"] != null)
            { regInicio = (int)ViewState["regInicio"]; }

            if (tipo == "proximo")
            { regInicio += tamPagina; }
            else if (tipo == "anterior")
            { regInicio -= tamPagina; }

            if (regInicio < 0)
            { regInicio = 0; }

            SqlConnection con = new SqlConnection(@"Data Source=DEVALDO-PC\SQLDELIVERY;Initial Catalog=maosObra;Integrated Security=True");
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "SELECT TIPOPROFISSIONAL.descTipoProf, SERVICO.codServico, SERVICO.responsavel, SERVICO.cidade, SERVICO.tipoServico, SERVICO.foneContato, SERVICO.email, "
                + "SERVICO.descricao, SERVICO.dataCadastro FROM     SERVICO INNER JOIN TIPOPROFISSIONAL ON SERVICO.codTipoprof = TIPOPROFISSIONAL.codTipoProf";

            SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, con);
            DataTable dt = new DataTable();

            da.Fill(regInicio, tamPagina, dt);

            if (tipo == "proximo" && dt.Rows.Count == 0 && regInicio > 0)
            {
                regInicio -= tamPagina;
                da.Fill(regInicio, tamPagina, dt);
            }

            dtlServicos.DataSource = dt;
            dtlServicos.DataBind();

            ViewState.Add("regInicio", regInicio);
        }

        protected void lnkPrevious_Click(object sender, EventArgs e)
        {
            ListarDados("anterior");
        }

        protected void lnkNext_Click(object sender, EventArgs e)
        {
            ListarDados("proximo");
        }

O meu html esta assim:
#Código
   <FooterTemplate>
                <asp:LinkButton ID="lnkPrevious" runat="server" ><< Anterior</asp:LinkButton>
                <asp:LinkButton ID="lnkNext" runat="server" >Próximo >></asp:LinkButton>
            </FooterTemplate>

Alguem sabe como faço para resolver este erro?
Grato DeliveryTI.

Post mais votado

Joel Rodrigues
   - 04 out 2014

Amigo, o código que está entre as linhas 14 e 28 pode ser reduzido para o seguinte:
#Código

if (((Label)e.Item.FindControl("lblProfissional")).Text != null)
{
	((Image)e.Item.FindControl("imgServ")).ImageUrl = "~/images/"+((Label)e.Item.FindControl("lblProfissional")).Text+".jpg";
}

Substitua aí, por favor, e veja se funciona. Não resolve seu problema, mas já limpa um pouco o código.

Joel Rodrigues
   - 02 set 2014

Como você está atribuindo os dados a este DataList? Está ligando a um DataSet, DataTable, List, o que?

Alisson
|
MVP
Pontos: 3400
    03 set 2014

Amigo boa noite, se não me engano essa funcionalidade já existe nos componentes do ASP.Net, a unica coisa que tem que fazer é utilizar uma ligação de dataset com a tabela em questão que já está pronto.

Delivery-ti
|
MVP
Pontos: 525
    03 set 2014

Acho que nao cara o DataList nao tem tem o GridView o datalist tem que fazer na unha eu estou tentando mas esta com erro.

Delivery-ti
|
MVP
Pontos: 525
    03 set 2014

Aqui esta joel ele carrega os dados na minha view dessa maneira.

#Código

    protected void dtlProfissionais_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType != ListItemType.Header && e.Item.ItemType != ListItemType.Footer)
            {
                if (Session["cliente"] != null)
                {
                    ((Image)e.Item.FindControl("imgProf")).ImageUrl = "http://localhost:3719/Servicos/" + ((PROFISSIONAL)e.Item.DataItem).fotoProf1.ToString();

                    codProf = int.Parse(((Label)e.Item.FindControl("lblcodPr")).Text = ((PROFISSIONAL)e.Item.DataItem).codProfissional.ToString());
                    ((Label)e.Item.FindControl("lblnome")).Text = ((PROFISSIONAL)e.Item.DataItem).nomeProfissional;
                    ((Label)e.Item.FindControl("lblFonePr")).Text = ((PROFISSIONAL)e.Item.DataItem).foneProfissional;
                    ((Label)e.Item.FindControl("lblTipoProfi")).Text = ((PROFISSIONAL)e.Item.DataItem).TIPOPROFISSIONAL.descTipoProf;
                    ((Label)e.Item.FindControl("lblDesc")).Text = ((PROFISSIONAL)e.Item.DataItem).descProfissional;

                    if (profissional.reputacaoProfissional <= 5)
                    {
                        ((Label)e.Item.FindControl("lblReputacao")).Text = "Ruim";
                    }
                    if (profissional.reputacaoProfissional <= 50)
                    {
                        ((Label)e.Item.FindControl("lblReputacao")).Text = "Bom";
                    }
                    if (profissional.reputacaoProfissional <= 100)
                    {
                        ((Label)e.Item.FindControl("lblReputacao")).Text = "Exelente";
                    }
                    ((Button)e.Item.FindControl("btnAval")).Visible = true;
                }
                else {
                    ((Label)e.Item.FindControl("Label6")).Visible = false;
                    ((Label)e.Item.FindControl("lblFonePr")).Visible = false;

                    ((Image)e.Item.FindControl("imgProf")).ImageUrl = "http://localhost:3719/Servicos/" + ((PROFISSIONAL)e.Item.DataItem).fotoProf1.ToString();

                    ((Label)e.Item.FindControl("lblcodPr")).Text = ((PROFISSIONAL)e.Item.DataItem).codProfissional.ToString();
                    ((Label)e.Item.FindControl("lblnome")).Text = ((PROFISSIONAL)e.Item.DataItem).nomeProfissional;
                    ((Label)e.Item.FindControl("lblFonePr")).Text = ((PROFISSIONAL)e.Item.DataItem).foneProfissional;
                    ((Label)e.Item.FindControl("lblTipoProfi")).Text = ((PROFISSIONAL)e.Item.DataItem).TIPOPROFISSIONAL.descTipoProf;
                    ((Label)e.Item.FindControl("lblDesc")).Text = ((PROFISSIONAL)e.Item.DataItem).descProfissional;

                    
                    if (profissional.reputacaoProfissional <= 5)
                    {
                        ((Label)e.Item.FindControl("lblReputacao")).Text = "Ruim";
                    }
                    if (profissional.reputacaoProfissional <= 50)
                    {
                        ((Label)e.Item.FindControl("lblReputacao")).Text = "Bom";
                    }
                    if (profissional.reputacaoProfissional <= 100)
                    {
                        ((Label)e.Item.FindControl("lblReputacao")).Text = "Exelente";
            }
        }


Bem joel esta dessa forma que eu sei fazer e sei tambem que tem o dataBind mas assim acho mlehor, porem nao sei fazer a paginao cara e preciso pois se nao minha pagina nao vai ter fim quando mais profissionais for se cadastrando no site mais ele vai crescendo porque ele esta mostrando tudo em uma unica pagina, quero colocar um limite e paginar tem como da uma ajudinha.

Grato Miller.

Delivery-ti
|
MVP
Pontos: 525
    15 set 2014

Galera estou tentando seguir um post aqui que o Fabio me indicou porem percebi que varios post os caras utilizam o datalist porem com uma tabela no meio eu como podem ver no codigo nao trabalho dessa forma e sim com ItemTemplate e AlternateItemTemplate, e estou tentando fazer a paginação mais uma vez e esta dando um erro.

Aqui esta o codigo:
#Código

   protected void Page_Load(object sender, EventArgs e)
        {
            lblValSearch.Visible = false;

            if (!IsPostBack)
            {
                txtSearch.Attributes.Add("data-marcadagua", "Cidade, nome ou tipo de Profissional...");

                if (Request.QueryString["profissional"] != null)
                {
                    idProfissional = int.Parse(Request.QueryString["profissional"].ToString());
                }
                BuscarProfissionais();
            }

            //criando a paginacao dos profissionais
            if (!IsPostBack)
            {
                this.ViewState["vs"] = 0;
            }
            pos = (int)this.ViewState["vs"];
            databind();
            
        }

    public void databind()
        {
            datadapter = new SqlDataAdapter("SELECT * FROM PROFISSIONAL", constring);
            dset = new DataSet();
            adsource = new PagedDataSource();
            datadapter.Fill(dset);
            adsource.DataSource = dset.Tables[0].DefaultView;
            adsource.PageSize = 3;
            adsource.AllowPaging = true;
            adsource.CurrentPageIndex = pos;
            btnFirst.Enabled = !adsource.IsFirstPage;
            btnNext.Enabled = !adsource.IsLastPage;
            dtlProfissionais.DataSource = adsource;
            dtlProfissionais.DataBind();
        }

        protected void btnPrev_Click(object sender, EventArgs e)
        {
            pos = (int)this.ViewState["vs"];
            pos -= 1;
            this.ViewState["vs"] = pos;
            databind();
        }

        protected void btnNext_Click(object sender, EventArgs e)
        {
            pos = (int)this.ViewState["vs"];
            pos += 1;
            this.ViewState["vs"] = pos;
        }


bem galera esta dessa maneira meu codigo segui o post e ele da erro nessa linha (datadapter.Fill(dset);)
com esta mensagem no erro:

Citação:
Erro de rede ou específico à instância ao estabelecer conexão com o SQL Server. O servidor não foi encontrado ou não estava acessível. Verifique se o nome da instância está correto e se o SQL Server está configurado para permitir conexões remotas. (provider: Named Pipes Provider, error: 40 - Não foi possível abrir uma conexão com o SQL Server)


Grato Miller.

Delivery-ti
|
MVP
Pontos: 525
    23 set 2014

Galera estou fazendo aqui a paginação e estou quase conseguindo porem quando eu clico no proximo ele nao esta trazendo as outras informações Alguem pode dar uma olhada no meu codigo e ajudar por favor.
Outra coisa reparem que nos dois primeiros dados que pego eles vem de tabelas que estao ligadas por FK, porem eu nao sei como trazer ele eu coloquei como podem ver no codigo abaixo mas sai ficou dando erro falando que esses objetos nao existem na minha tabela que consulto, ai peguei e comentei so pra testar se esta trazendo os dados.

Aqui é meu DataList galera:
#Código

   <asp:DataList ID="dtlServicos" runat="server" CssClass="dataServ" 
            RepeatColumns="2" >
            <ItemTemplate>
                <fieldset class="filServ">
                    <p class="text_serv1">
                      <div class="txtServ">
                        <asp:Image ID="imgServ" runat="server" ImageUrl="#" Height="171px" Width="120px" class="ftServ" Border="0" />
                        
                        <%--<%#Eval("codTipoProfissional")%>--%>     // aqui que nao sei como pegar a descricao pois ele vem de outra tabela 
                        <asp:Label ID="lblCodC" CssClass="codCli" runat="server" Text="Cod:" />
                        <%--<%#Eval("codCliente")%>--%><br/>         // aqui tambem galera o dado esta em outra tabela nao sei como pegar
                        
                        <div class="rpServ">
                          <asp:Label ID="Label1" runat="server" CssClass="labels" Text="Resp.:" />
                          <%#Eval("responsavel") %>
                        </div>
                        <div class="cddServ">
                           <asp:Label ID="Label7" runat="server" CssClass="labels" Text="Cidade:" />
                           <%#Eval("cidade") %>
                       </div><br/>
                        <div class="contS">
                            <asp:Label ID="lblFone" runat="server" CssClass="labels" Text="Fone:" />
                            <%#Eval("foneContato") %>
                        </div><br/>
                        <div class="emServ">
                        <asp:Label ID="lblMail" runat="server" CssClass="labels" Text="Email:" />
                        <%#Eval("email") %>
                        </div><br />
                        <div class="divTrab">
                           <asp:Label ID="lbl3" runat="server" CssClass="labels" Text="Trabalho:" />
                           <%#Eval("tipoServico") %>
                        </div>
                        <div class="divDes">
                           <asp:Label ID="Label3" runat="server" CssClass="labels" Text="Descrição:" />
                           <%#Eval("descricao") %>
                        </div>
                        <div class="dataC">
                           <asp:Label ID="Label5" runat="server" CssClass="labels" Text="Data Cadastro:" />
                           <%#Eval("dataCadastro") %>
                        </div>
                     </div>
                  </p>
                </fieldset>
            </ItemTemplate>
            <FooterTemplate>
                <asp:LinkButton ID="lnkPrevious" runat="server" CssClass="anter"><< Anterior</asp:LinkButton>
                <asp:LinkButton ID="lnkNext" runat="server" CssClass="prox">Próximo >></asp:LinkButton>
            </FooterTemplate>
        </asp:DataList>


Bem galera agora para mostrar como esta minha paginação tenho o codigo do CodBehid:

#Código
  protected void ListarDados(string tipo)
        {
            int tamPagina = 4;
            int regInicio = 0;

            if (ViewState["regInicio"] != null)
            { regInicio = (int)ViewState["regInicio"]; }

            if (tipo == "proximo")
            { regInicio += tamPagina; }
            else if (tipo == "anterior")
            { regInicio -= tamPagina; }

            if (regInicio < 0)
            { regInicio = 0; }

            SqlConnection con = new SqlConnection(@"Data Source=DEVALDO-PC\SQLDELIVERY;Initial Catalog=maosObra;Integrated Security=True");
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandText = "SELECT TIPOPROFISSIONAL.descTipoProf, SERVICO.codServico, SERVICO.responsavel, SERVICO.cidade, SERVICO.tipoServico, SERVICO.foneContato, SERVICO.email, "
                + "SERVICO.descricao, SERVICO.dataCadastro FROM SERVICO INNER JOIN TIPOPROFISSIONAL ON SERVICO.codTipoprof = TIPOPROFISSIONAL.codTipoProf";

            con.Open();
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            DataTable dt = new DataTable();

            da.Fill(regInicio, tamPagina, dt);

            if (tipo == "proximo" && dt.Rows.Count == 0 && regInicio > 0)
            {
                regInicio -= tamPagina;
                da.Fill(regInicio, tamPagina, dt);
            }

            dtlServicos.DataSource = dt;
            dtlServicos.DataBind();
            con.Close();

            ViewState.Add("regInicio", regInicio);
        }

        protected void lnkPrevious_Click(object sender, EventArgs e)
        {
            ListarDados("anterior");
        }

        protected void lnkNext_Click(object sender, EventArgs e)
        {
            ListarDados("proximo");
        }
    }


Por favor alguem pode ar uma força?

Delivery-ti
|
MVP
Pontos: 525
    24 set 2014

Galera a parte de como pegar o codigo do cliente arrumei e o codiTipoProf tambem porem eu tenho que trazer na verdade a descricao do tipo de profissional e estou tentando ainda mas se alguem souber como faço, ate tentei colocar no meu select assim:

select TIPOPROFISSIONAL.descTipoProf porem tenho que converter ele deu um erro agora dizendo que minha fk e um int e minha consulta retorna uma string.

Delivery-ti
|
MVP
Pontos: 525
    25 set 2014

Galera grato a todos que ajudou e deu dicas mas consegui resolver este problema.

Grato Miller.

Delivery-ti
|
MVP
Pontos: 525
    25 set 2014

Ola olha so como sao as coisas voce arruma uma coisa e se depara com outro problema kkk.

Galera o problema que eu estou agora acho que é mais simples pra quem ja trabalha ou trabalhou com essa propriedade EVAL.

Tenho que pegar um valor que esta em outra tabela e mostrar onde chamo meu EVAL assim:

#Código

  <asp:Label id="lblCodTipoProf" runat="server" Text='<%#Eval("descTipoProf")%>' />


porem nao consigo mostrar essa descricao de maneira alguma so consigo mostra se for o codigo do tipo profissional que esta na minha tabela SERVICO como chave estrangeira ai ele traz certinho galera.

#Código
 <asp:Label id="lblCodTipoProf" runat="server" Text='<%#Eval("codTipoProf")%>' />

assim ele traz do outro jeito nao, e eu preciso da descricao alguem sabe como fazer isso?

Grato Miller.

Delivery-ti
|
MVP
Pontos: 525
    30 set 2014

Joel como você solicitou estou postando aqui a uma duvida que estou tendo, na verdade nao sei o que esta acontecendo pois fiz uma validação dentro do meu DataList e ele nao esta aplicando a todos os dados que ele exibe, esta assim:

Olha só aqui é onde eu atribuo esta validação do meu datalist na verdade é somente esse dois dados dados que eu estou tentando esconder caso o cara nao esteja logado, e essas imagens abaixo aparece de acordo com o tipo de profissional.
#Código

    protected void dtlServicos_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item)
            {
                if (Session["profissional"] == null)
                {
                    ((Label)e.Item.FindControl("lbFone")).Text = null;
                    ((Label)e.Item.FindControl("lbContato")).Text = null;

                    ((Label)e.Item.FindControl("lblMail")).Text = null;
                    ((Label)e.Item.FindControl("lblEmailS")).Text = null;
                }

                if (((Label)e.Item.FindControl("lblProfissional")).Text != null)
                { ((Image)e.Item.FindControl("imgServ")).ImageUrl = "~/images/pedreiro.jpg"; }
                    else
                    if (((Label)e.Item.FindControl("lblProfissional")).Text == "Encanador")
                    { ((Image)e.Item.FindControl("imgServ")).ImageUrl = "~/images/encanador.jpg"; }
                    else
                        if (((Label)e.Item.FindControl("lblProfissional")).Text == "Eletricista")
                        { ((Image)e.Item.FindControl("imgServ")).ImageUrl = "~/images/eletricista.jpg"; }
                        else
                            if (((Label)e.Item.FindControl("lblProfissional")).Text == "Pintor")
                            { ((Image)e.Item.FindControl("imgServ")).ImageUrl = "~/images/pintor.jpg"; }
                            else
                                if (((Label)e.Item.FindControl("lblProfissional")).Text == "Marceneiro")
                                { ((Image)e.Item.FindControl("imgServ")).ImageUrl = "~/images/marceneiro.jpg"; }
                                else
                                    if (((Label)e.Item.FindControl("lblProfissional")).Text == "Jardineiro")
                                    { ((Image)e.Item.FindControl("imgServ")).ImageUrl = "~/images/jardineiro.jpg"; }
                                    else
                                        if (((Label)e.Item.FindControl("lblProfissional")).Text == "Gesseiro")
                                        { ((Image)e.Item.FindControl("imgServ")).ImageUrl = "~/images/gesseiro.jpg"; }
                                        else
                                            if (((Label)e.Item.FindControl("lblProfissional")).Text == "Cerralheiro")
                                            { ((Image)e.Item.FindControl("imgServ")).ImageUrl = "~/images/cerralheiro.jpg"; }

                }
        }


Porem galera ele esta alternando essa validação e as imagens também, por exemplo se eu tiver 4 linhas, ele atribui a validação e imagem corretamente, já na segunda não traz a imagem e nem aplica a validação e na terceira aplica e assim por diante, ou seja na verdade ele esta alternando minha validação e a imagem.

Olha na imagem:
imagem do problema descrito acima (Clique na imagem para abrir em uma nova janela)

Olha ai galera na imagem esta visível o problema mas eu também fiz uma marcação para vocês verem.

Grato Miller.

Delivery-ti
|
MVP
Pontos: 525
    02 out 2014

E ai galera alguem sabe o que pode ser este problema?

Delivery-ti
|
MVP
Pontos: 525
    03 out 2014

Poxa galera o forum esta fora de operação?

Delivery-ti
|
MVP
Pontos: 525
    04 out 2014

Nossa ótima otimização Joel resolveu sim .

Grato.Miller.

Delivery-ti
|
MVP
Pontos: 525
    22 out 2014

Galera obrigado pela força eu consegui resolver este problema dele alternar onde aparece os dados agora esta tudo certo.

Grato Miller.

Delivery-ti
|
MVP
Pontos: 525
    22 nov 2014

Topico finalizado galera problema resolvido