Paginacao no DataList
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:
Minha oaginação esta assim o codigo galera mas nao sei o que esta errado.
O meu html esta assim:
Alguem sabe como faço para resolver este erro?
Grato DeliveryTI.
Não é possível converter um objeto do tipo 'System.Data.DataRowView' no tipo 'maos.DAO.SERVICO'.
nesta linha:
((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.
//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:
<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.
Celiol.
Curtidas 1
Melhor post
Joel Rodrigues
04/10/2014
Amigo, o código que está entre as linhas 14 e 28 pode ser reduzido para o seguinte:
Substitua aí, por favor, e veja se funciona. Não resolve seu problema, mas já limpa um pouco o 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.
GOSTEI 1
Mais Respostas
Joel Rodrigues
26/08/2014
Como você está atribuindo os dados a este DataList? Está ligando a um DataSet, DataTable, List, o que?
GOSTEI 0
Alisson Santos
26/08/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.
GOSTEI 0
Celiol.
26/08/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.
GOSTEI 0
Celiol.
26/08/2014
Aqui esta joel ele carrega os dados na minha view dessa maneira.
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.
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.
GOSTEI 0
Celiol.
26/08/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:
bem galera esta dessa maneira meu codigo segui o post e ele da erro nessa linha (datadapter.Fill(dset);)
com esta mensagem no erro:
Grato Miller.
Aqui esta o codigo:
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:
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.
GOSTEI 0
Celiol.
26/08/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:
Bem galera agora para mostrar como esta minha paginação tenho o codigo do CodBehid:
Por favor alguem pode ar uma força?
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:
<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:
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?
GOSTEI 0
Celiol.
26/08/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.
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.
GOSTEI 0
Celiol.
26/08/2014
Galera grato a todos que ajudou e deu dicas mas consegui resolver este problema.
Grato Miller.
Grato Miller.
GOSTEI 0
Celiol.
26/08/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:
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.
assim ele traz do outro jeito nao, e eu preciso da descricao alguem sabe como fazer isso?
Grato Miller.
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:
<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.
<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.
GOSTEI 0
Celiol.
26/08/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.
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:
[img:descricao=imagem do problema descrito acima]http://arquivo.devmedia.com.br/forum/imagem/335183-20140930-235719.png[/img]
Olha ai galera na imagem esta visível o problema mas eu também fiz uma marcação para vocês verem.
Grato Miller.
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.
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:
[img:descricao=imagem do problema descrito acima]http://arquivo.devmedia.com.br/forum/imagem/335183-20140930-235719.png[/img]
Olha ai galera na imagem esta visível o problema mas eu também fiz uma marcação para vocês verem.
Grato Miller.
GOSTEI 0
Celiol.
26/08/2014
E ai galera alguem sabe o que pode ser este problema?
GOSTEI 0
Celiol.
26/08/2014
Poxa galera o forum esta fora de operação?
GOSTEI 0
Celiol.
26/08/2014
Nossa ótima otimização Joel resolveu sim .
Grato.Miller.
Grato.Miller.
GOSTEI 0
Celiol.
26/08/2014
Galera obrigado pela força eu consegui resolver este problema dele alternar onde aparece os dados agora esta tudo certo.
Grato Miller.
Grato Miller.
GOSTEI 0
Celiol.
26/08/2014
Topico finalizado galera problema resolvido
GOSTEI 0