Componentes Repeater aninhados

26/11/2008

0

Olá pessoal,

Esse é meu primeiro post no fórum. Mas faz dois dias que venho sofrendo com um problema de programação simples por falta de conhecimento com .Net - cheguei ao ponto de desespero, pois o que eu faria facilmente em PHP ou ASP em 5 minutos está um martírio fazer com ASP.Net.

Tendarei documentar o problema da forma mais clara possível:

Banco de dados 1:

SELECT 
  DISTINCT 
  _A.[dt_emissao],
  VendaRepresentantes.vendedor

FROM 
  MI as _A,
  VendaRepresentantes
  
WHERE
  VendaRepresentantes.subgrupo IN(1,2)

ORDER BY 
  1 ASC, 
  2 ASC


Isso resulta em:

----------------------+-----------------+
 dt_emissao           | vendedor        
----------------------+-----------------+
 1/10/2008 0:00:00 | 1 
 1/10/2008 0:00:00 | 4 
 1/10/2008 0:00:00 | 6 
 1/10/2008 0:00:00 | 65 
 1/10/2008 0:00:00 | 195 
 1/10/2008 0:00:00 | 450 
 1/10/2008 0:00:00 | 456 
 1/10/2008 0:00:00 | 458 
 1/10/2008 0:00:00 | 462 
 1/10/2008 0:00:00 | 463 
 1/10/2008 0:00:00 | 464 
 1/10/2008 0:00:00 | 465 
 1/10/2008 0:00:00 | 470 
 1/10/2008 0:00:00 | 482 
 2/10/2008 0:00:00 | 1 
 2/10/2008 0:00:00 | 4 
 2/10/2008 0:00:00 | 6 
 2/10/2008 0:00:00 | 65 
 2/10/2008 0:00:00 | 195 
 2/10/2008 0:00:00 | 450 
 2/10/2008 0:00:00 | 456 
 2/10/2008 0:00:00 | 458 
 2/10/2008 0:00:00 | 462 
 2/10/2008 0:00:00 | 463 
 2/10/2008 0:00:00 | 464 
 2/10/2008 0:00:00 | 465 
 2/10/2008 0:00:00 | 470 
 2/10/2008 0:00:00 | 482 
-----------------------+----------------


Todos os dias que houveram vendas com todos os vendedores que eu preciso.

Até aí ótimo, a lógica da consulta para a minha aplicação está OK.


Aqui começa o sofrimento - preciso utilizar as datas e códigos de vendedores (Resultados acima) como argumentos para uma nova consulta.


<¬@ Page Language="C#" AutoEventWireup="true" CodeFile="EvolucaoVendedores.aspx.cs" Inherits="Data_EvolucaoVendedores" ¬>

    <form id="form1" runat="server">
    
    <asp:Repeater[color=blue] ID="Repeater1"[/color] runat="server" DataSourceID="SqlDataSourcePeriodo" [color=red]OnItemDataBound="rptSqlDataSourcePeriodo_ItemDataBound"[/color]>
        <ItemTemplate>
            <¬ DataBinder.Eval(Container, "DataItem.dt_emissao") ¬>
            <¬ DataBinder.Eval(Container, "DataItem.cd_vendedor") ¬>
            <asp:Repeater [color=blue]ID="Repeater2"[/color] runat="server" DataSourceID="SqlDataSourceVendedores">
                <ItemTemplate>
                    <¬# DataBinder.Eval(Container, "DataItem.total") ¬>
                </ItemTemplate>
            </asp:Repeater>
        </ItemTemplate>
    </asp:Repeater>
    
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
&nbsp;<asp:SqlDataSource DataSourceMode="DataReader" ID="SqlDataSourcePeriodo" runat="server" 
        ConnectionString="<¬$ ConnectionStrings:independenciaConnectionString ¬>" 
        SelectCommand="SELECT 
  DISTINCT 
  _A.[dt_emissao],
  VendaRepresentantes.vendedor as cd_vendedor

FROM 
  MI as _A,
  VendaRepresentantes
  
WHERE
  VendaRepresentantes.subgrupo IN(1,2)

ORDER BY 
  1 ASC, 
  2 ASC"></asp:SqlDataSource>
    <asp:SqlDataSource DataSourceMode="DataReader" ID="SqlDataSourceVendedores" 
    runat="server" 
    ConnectionString="<¬$ ConnectionStrings:independenciaConnectionString ¬>" SelectCommand="SELECT 
SUM(MI.vl_produto) as total

FROM 
  MI

WHERE
MI.dt_emissao = @dt_emissao
    AND MI.cd_vendedor = @cd_vendedor">
        <SelectParameters>
            <asp:Parameter Name="dt_emissao" DefaultValue="" Type="DateTime" />
            <asp:Parameter Name="cd_vendedor" DefaultValue="" Type="String" />
        </SelectParameters>
</asp:SqlDataSource>
<p>
    &nbsp;</p>
</form>



Ou seja,

Tenho os componentes Repeater1 (Pai) e Repeater2 (Filho).

Para o Repeater1 tenho o data source -> SqlDataSourcePeriodo

Para o Repeater2 tenho o data source -> SqlDataSourceVendedores


O Repeater1 tem o evento [b:edc2515f91]OnItemDataBound=´rptSqlDataSourcePeriodo_ItemDataBound´[/b:edc2515f91]

E agora vamos ao aspx.cs
[/code]
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
//using Accessibility;


public partial class Data_EvolucaoVendedores : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}

protected void rptSqlDataSourcePeriodo_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
//sender.GetType();
DbDataRecord dbr = (DbDataRecord)e.Item.DataItem;
[b:edc2515f91]SqlDataSourceVendedores.SelectParameters[´dt_emissao´].DefaultValue = Convert.ToDateTime(DataBinder.Eval(dbr, ´dt_emissao´).ToString()).ToString(´s´).Substring(0,10);
SqlDataSourceVendedores.SelectParameters[´cd_vendedor´].DefaultValue = DataBinder.Eval(dbr, ´cd_vendedor´).ToString();
[/b:edc2515f91]
// @@@ SOMENTE PARA DEPURACAO
Label1.Text += ´ ´ + Convert.ToDateTime(DataBinder.Eval(dbr, ´dt_emissao´).ToString()).ToString(´s´).Substring(0, 10) + ´ ´ + DataBinder.Eval(dbr, ´cd_vendedor´).ToString() + ´ \n´;
//SqlDataSourceVendedores.DataBind();
}
}
protected void SqlDataSourcePeriodo_DataBinding(object sender, EventArgs e)
{

}
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{

}
}

Isso reproduz a seguinte saída:


1/10/2008 0:00:00
1

[b:edc2515f91]685566,1800 ???? PORQUÊ[/b:edc2515f91]


1/10/2008 0:00:00
4

[b:edc2515f91]685566,1800 ???? PORQUÊ são iguais e a 4 digitos de precisao? [/b:edc2515f91]


1/10/2008 0:00:00
6

685566,1800


1/10/2008 0:00:00
65

685566,1800


1/10/2008 0:00:00
195

685566,1800


1/10/2008 0:00:00
450

685566,1800


1/10/2008 0:00:00
456

685566,1800


1/10/2008 0:00:00
458

685566,1800


1/10/2008 0:00:00
462

685566,1800


1/10/2008 0:00:00
463

685566,1800


1/10/2008 0:00:00
464

685566,1800


1/10/2008 0:00:00
465

685566,1800


1/10/2008 0:00:00
470

685566,1800


1/10/2008 0:00:00
482

685566,1800


2/10/2008 0:00:00
1

685566,1800


2/10/2008 0:00:00
4

685566,1800


2/10/2008 0:00:00
6

685566,1800


2/10/2008 0:00:00
65

685566,1800


2/10/2008 0:00:00
195

685566,1800


2/10/2008 0:00:00
450

685566,1800


2/10/2008 0:00:00
456

685566,1800


2/10/2008 0:00:00
458

685566,1800


2/10/2008 0:00:00
462

685566,1800


2/10/2008 0:00:00
463

685566,1800


2/10/2008 0:00:00
464

685566,1800


2/10/2008 0:00:00
465

685566,1800


2/10/2008 0:00:00
470

685566,1800


2/10/2008 0:00:00
482

685566,1800


A minha impressão é que a cada iteração no laço de repetição do Repeater pai é como se o filho pegasse a mesma data do dt_emissao e código do vendedor.

Desde já agradeço imensamente quem se dispuser a dar uma luz nesse caso.



Sorvete

Sorvete

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar