Paginacao no DataList
26/08/2014
0
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.
Post mais votado
04/10/2014
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
Mais Posts
02/09/2014
Joel Rodrigues
03/09/2014
Alisson Santos
03/09/2014
Celiol.
03/09/2014
Celiol.
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.
15/09/2014
Celiol.
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:
Grato Miller.
23/09/2014
Celiol.
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?
24/09/2014
Celiol.
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.
25/09/2014
Celiol.
Grato Miller.
25/09/2014
Celiol.
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.
30/09/2014
Celiol.
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.
22/10/2014
Celiol.
Grato Miller.
Clique aqui para fazer login e interagir na Comunidade :)