Pergunta

Tenho alguns dados que devem ser apresentados em forma tabular com múltiplas seções.Em particular, cada seção de dados é dividida (com seus próprios cabeçalhos) por dia.Este é basicamente um acordo único de página única e não será mantido, então não quero colocar muito esforço em arquitetura.

Eu tenho duas mesas.CABEÇALHOS e ITENS.

HEADERS têm um formato de:

date(datetime), type(tinyint), firstline(varchar), secondline(varchar)

ITEMS tem um formato de

id(int), date(datetime), type(tinyint), name(varchar), value1(int), 
    value2(int), value3(int)

Preciso que os dados sejam semelhantes a este (a primeira e a segunda linha são preenchidas com dados, a terceira linha é texto estático, as linhas de item são preenchidas com dados):

1/1/2009
--------------------------------------------------------------------------
|                              [First line]                              |
--------------------------------------------------------------------------
|                             [Second line]                              |
--------------------------------------------------------------------------
|  Date |       Name            |   Value 1    |   Value 2   |  Value 3  |
==========================================================================
| [Date]|      [Name]           |  [Value 1]   |  [Value 2]  | [Value 3] |
--------------------------------------------------------------------------
| [Date]|      [Name]           |  [Value 1]   |  [Value 2]  | [Value 3] |
--------------------------------------------------------------------------
1/2/2009
--------------------------------------------------------------------------
|                              [First line]                              |
--------------------------------------------------------------------------
|                             [Second line]                              |
--------------------------------------------------------------------------
|  Date |       Name            |   Value 1    |   Value 2   |  Value 3  |
==========================================================================
| [Date]|      [Name]           |  [Value 1]   |  [Value 2]  | [Value 3] |
--------------------------------------------------------------------------
| [Date]|      [Name]           |  [Value 1]   |  [Value 2]  | [Value 3] |
--------------------------------------------------------------------------

Isso será repetido por todos os dias atualmente no banco de dados, cada dia tendo sua própria tabela com seus próprios cabeçalhos.Eles também serão filtrados por tipo.a página mostrará apenas cabeçalhos e itens do tipo especificado.O tipo é um tinyint.

Portanto, a questão é: quais são os melhores elementos do ASP.NET para usar?Lista de dados?GridView?E como incluo os dados de duas tabelas em formato cabeçalho/item?

EDITAR:Desculpe, esqueci de mencionar que isso precisa funcionar no Windows 2000/IIS5, então estou preso ao ASP.NET 2.0 e não posso usar os recursos 3.0 ou 3.5.

Foi útil?

Solução 5

Ok, aqui está a solução final que encontrei.Tenho certeza de que isso não é o mais eficiente ou o mais rápido, mas eu só precisava fazer isso e seguir em frente com outra coisa.

Meu primeiro passo foi criar uma classe base, que chamei de RowBase, esta era uma classe abstrata que implementava um método abstrato chamado GetRow();Então derivei duas outras classes, BannerRow e ItemRow de RowBase.Essas classes contêm campos com todos os dados utilizados nas minhas tabelas.

Em seguida, criei dois DataTables e os preenchi com os resultados de minhas duas consultas por meio de um DataAdapter.

Em seguida, criei um List<RowBase> e interagi com as tabelas de dados, criando um BannerRow ou ItemRow dependendo do tipo de linha.

Em seguida, executei um List<RowBase>.Sort, classificando por data e tipo de linha para garantir que BannerRows dê prioridade sobre ItemRows.

Por fim, criei uma tabela em meu formulário da web, configurei-a para runat="server" com um id="maintable" e, em seguida, iterei em meu List<RowBase> e chamei GetRow em cada RowBase.

BannerRow e ItemRow tiveram, cada um, uma substituição de GetRow() que retornou um HtmlTableRow formatado para incluir os dados no formato correto.Em seguida, usei alguma lógica condicional para inserir linhas de cabeçalho para os dados ItemRow, tudo resolvido.

Esta é uma variação da ideia de Rob e Ben, mas incluiu muito mais massagem nos dados, então dei votos positivos a ambos, mas estou me creditando pela resposta.

Outras dicas

Dê uma olhada no ASP: Tabela. Você pode programar a programação adicionar as linhas e colunas em algumas iterações condicionais aninhadas no código.

Eu recomendaria devolver os dados como XML e depois usar um XSLT para criar seu relatório. Caso contrário, você terá que usar visualizações ou repetidores aninhados.

Se o padrão for verdadeiro sempre com o mesmo número de linhas, etc. Um repetidor pode ser a sua melhor aposta e fornecer o maior controle sobre como o layout fica na tela.

Coloque um <asp:Table> na página e construa -a a partir do código atrás.

Use o parâmetro Colspan para as colunas (células), pois isso permite criar entradas que abrangem muitas colunas para as linhas que precisam.

Para o seu aplicativo acima, isso significaria que a primeira linha e a segunda linha teriam um Colspan de 5.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top