ASP .NET - Exibindo Colunas Calculadas em um DataGrid
A versatilidade do componente DataGrid é impressionante . Você pode realizar tarefas que antes exigiriam muito código apenas configurando as propriedades do componente. Exibir valores monetários e criar colunas calculadas é um bom exemplo de como o DataGrid pode ser simples de usar.
Neste artigo eu vou mostrar como criar uma coluna calculada usando a tabela Produtos do banco de dados Northwind.mdb (o nosso saco de pancadas) . A estrutura desta tabela é exibida a seguir :
O objetivo é exibir em um DataGrid as seguintes colunas:
Para criar a coluna calculada irei usar uma função que faz multiplicação do preço unitário pela quantidade em estoque : (String.Format("{0:c}", iPreco*IEstoque)
A formatação da coluna para valores monetários , no nosso caso o real ( R$) é feita usando o formato: (String.Format("{0:c}"
Para criar este exemplo vou usar o Web matrix . Então mãos a obra...
1.
Abra o ASP.NET Web Matrix.
2.
Selecione (General) do
painel Templates.
3.
Selecione o modelo ASP.NET
Page.
4.
Digite um caminho de arquivo
na caixa Location. (no meu caso eu informei : d:\macoratti\aspnet\)
5.
Digite TotalColunaGrid
na caixa Filename. (você pode usar qualquer outro nome de arquivo
válido)
Insira o componente DataGrid na guia Design e faça a formatação do DataGrid a seu Gosto. Abaixo a aparência da formatação usada no DataGrid do Exemplo e a seguir código HTML que configura o DataGrid e define os campos vinculados que iremos exibir.
A formatação pode ser feita no Web Matrix selecionando o componente na aba Design e a seguir clicando no link :Auto Format e a seguir selecionando um formato desejado .
|
|
Código HTML referente ao DataGrid formatado e os campos vinculados da tabela Produtos:
<html> <head> <title>Exibindo coluna calculadas em um DataGrid</title> </head> <body> <form id="form1" runat="server"> <div align="center"> </div> <img height="32" src="maco10.gif" width="233" border="0" /><font face="Verdana" color="#004080" size="2"><strong>Criando colunas totalizadas</strong></font> <div align="left"> <asp:Datagrid id="DataGrid" CellSpacing="2" BorderWidth="1px" BorderStyle="None" Font-Names="Verdana" Height="273px" _ Width="468px" cellpadding="3" Headerstyle-BackColor="#BDCFE7" Headerstyle-Font-Name="Arial" Headerstyle-Font-Size="8"_ BackColor="#DEBA84" Font-Name="Arial" Font-Size="8pt" BorderColor="#DEBA84" AllowPaging="True" PageSize="15" _ PagerStyle-Mode="NumericPages" PagerStyle-HorizontalAlign="Center" PagerStyle-PageButtonCount="10" _ OnPageIndexChanged="Page_Change" AutogenerateColumns="False" Runat="server"> <FooterStyle forecolor="#8C4510" backcolor="#F7DFB5"></FooterStyle> <HeaderStyle font-size="8pt" font-names="Arial" font-bold="True" forecolor="White" backcolor="#A55129"></HeaderStyle> <PagerStyle horizontalalign="Center" forecolor="#8C4510" mode="NumericPages"></PagerStyle> <SelectedItemStyle font-bold="True" forecolor="White" backcolor="#738A9C"></SelectedItemStyle> <ItemStyle forecolor="#8C4510" backcolor="#FFF7E7"></ItemStyle> <Columns> <asp:BoundColumn DataField="NomeDoProduto" HeaderText="Produto">
<HeaderStyle font-bold="True"></HeaderStyle> </asp:BoundColumn> <asp:BoundColumn DataField="PreçoUnitário" HeaderText="Preço Unitário" DataFormatString="{0:c}">
<HeaderStyle font-bold="True"></HeaderStyle> <ItemStyle horizontalalign="Right"></ItemStyle> </asp:BoundColumn> <asp:BoundColumn DataField="UnidadesEmEstoque" HeaderText="Em Estoque">
<HeaderStyle font-bold="True"></HeaderStyle> <ItemStyle horizontalalign="Right"></ItemStyle> </asp:BoundColumn> <asp:TemplateColumn HeaderText="Custo Total"> <HeaderStyle font-bold="True" horizontalalign="Center"></HeaderStyle> <ItemStyle horizontalalign="Right"></ItemStyle> <ItemTemplate> <%# CalculaTotal(Container.DataItem("PreçoUnitário"), Container.DataItem("UnidadesEmEstoque"))%>
</ItemTemplate> </asp:TemplateColumn> </Columns> </asp:Datagrid> </div> <div align="center"> </div> </form> </body> </html> |
O código VB.NET que acessa o banco de dados e possui a função para efetuar o calculo da coluna é o seguinte:
Sub Page_Load(Source as Object, E as EventArgs) BindData End Sub Function CalculaTotal(iPreco, iEstoque) as String CalculaTotal=String.Format("{0:c}", iPreco*IEstoque) End Function Sub Page_Change(sender As Object, e As DataGridPageChangedEventArgs) DataGrid.CurrentPageIndex = e.NewPageIndex BindData End Sub Sub BindData() Dim strConn as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("data\Northwind.mdb") & ";" Dim SQL as string = "Select [NomeDoProduto], [PreçoUnitário], [UnidadesEmEstoque] from Produtos" Dim Conn as New OleDBConnection(strConn) Dim ds as DataSet=New DataSet() Dim Cmd as New OleDBDataAdapter(SQL,Conn) Cmd.Fill(ds,"Produtos") DataGrid.Datasource=ds.Tables("Produtos").DefaultView DataGrid.DataBind() End Sub
|
A formatação das colunas pode ser feita também diretamente na interface oferecida pelo Web Matrix. Selecione o componente DataGrid na aba Design e em propriedades selecione Columns e a seguir clique no botão com reticências
A janela de configuração de propriedades para o DataGrid irá surgir. Agora é só selecionar o que você quer configurar e pronto...
Após executar o arquivo - totalColunaGrid.aspx - no servidor Web Matrix , o resultado será :
Mais simples impossível. É o ASP .NET . Pegue o código completo : totalColunaGrid.zip
E , até o próximo artigo ASP.NET .
José Carlos Macoratti