Dev (Back & Front)ARTIGO

ADO .NET – Incluindo uma coluna calculada em um DataTable

O que você faria se tivesse que
exibir o valor calculado para cada linha de um objeto DataTable? Se você está demorando muito para
responder, ou talvez não tenha idéia de como resolver este
problema, continue lendo o artigo…

Uma forma simples de resolver é
definir uma coluna com uma expressão para realizar o cálculo na
tabela e em seguida exibir o cálculo.

Esta solução cria um DataTable
contendo as 5 linhas da tabela Products do banco de dados Northwind, onde uma coluna contendo uma expressão para calcular o
preço para cada registro é incluída na tabela e o resultado
pode ser exibido na sua aplicação.

Recursos usados neste artigo:

  • Visual Basic 2008
    Express Edition
  • Visual C# 2008 Express
    Edition
  • SQL Server Management
    Studio Express
  • Banco de dados
    Northwind.mdf ( pegue
    aqui )

Dica: Após baixar
o banco de dados Northwind.mdf descompacte-o
para uma pasta e abra o Management Studio e
execute o script SQL para gerar o banco de dados.

Abrindo o banco de dados no Management
Studio
temos :

Observe que a tabela produtos possui
as colunas UnitPrice e UnitsInStock. O que iremos fazer é criar
uma coluna com uma expressão para calcular o valor dessas duas
colunas e exibi-las em um formulário windows forms.

Eu vou criar um projeto do tipo
Windows Application o Visual Basic 2008 com o nome colunaCalculada_DT;

No formulário padrão form1.vb
vamos incluir um controle ListBox – lstResultado e dois controles
Button: btnSair e btnExibir conforme o leiaute abaixo:

Defina os seguintes imports no
formulário:

Imports System.Data
Imports System.Data.SqlClient

A seguir no evento Click do botão
de comando Exibir inclua o seguinte código:

Private Sub btnExibir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExibir.Click<br /><br />        Dim sqlCon As String = "Data Source=.\SQLEXPRESS;Integrated security=SSPI;Initial Catalog=Northwind;"<br /><br />        Dim sql As String = "SELECT TOP 5 * FROM Products"<br /><br />        ' Usa a DataAdapter para preencher o DataTable<br />        Dim da As New SqlDataAdapter(sql, sqlCon)<br />        Dim dt As New DataTable()<br />        da.Fill(dt)<br /><br />        ' Cria uma coluna e Inclui uma expressão na coluna da tabela<br /><strong>    dt.Columns.Add(New DataColumn("totalCalculado", GetType([Decimal]), "UnitPrice * UnitsInStock"))</strong><strong><br /></strong><br />        lstResultado.Items.Add("Cod.  Preço      Estoque     Total ")<br />        For Each row As DataRow In dt.Rows<br />            lstResultado.Items.Add(Convert.ToString(row("ProductID")) & "      " & _<br />                                   Convert.ToString(row("UnitPrice")) & "       " & _<br />                                   Convert.ToString(row("UnitsInStock")) & "            " & _<br />                                   Convert.ToString(row("totalCalculado")))<br />        Next<br />    End Sub

Uma coluna com a expressão
calculada contém um valor que é calculado a partir de valores
de outras colunas na mesma linha, ou a partir de um agregado de
linhas na tabela ou em tabelas relacionadas.

O DataType da
coluna precisa ser compatível com o valor retornado pela
expressão.

Uma coluna com a expressão de
cálculo é incluída na tabela ou através de um construtor
DataColumn que toma a expressão para a coluna como um terceiro
argumento (o que usamos neste exemplo) ou pela definição da
propriedade Expression da coluna para a expressão.

No exemplo, uma coluna com a
expressão chamada totalCalculado é criada com o tipo de dados Decimal. A coluna calcula o valor total em estoque para um produto
usando a coluna UntPrice * UnitsInStock.

Depois de a coluna ser incluída na
tabela, as propriedades RowFilter ou Sort do DataView vinculadas à
tabela com a expressão coluna podem ordenar ou filtrar os dados
da mesma forma que qualquer outra coluna.

O código para linguagem C# é exibido a seguir:

void BtnExibirClick(object sender, EventArgs e)<br />	{<br />	    string sqlConnectString = "Data Source=(local);" +<br />            				            "Integrated security=SSPI;Initial Catalog=Northwind;";<br /><br />            string sqlSelect = "SELECT TOP 5 * FROM Products";<br /><br />            // Usa a DataAdapter para preencher o DataTable<br />            SqlDataAdapter da = new SqlDataAdapter(sqlSelect, sqlConnectString);<br />            DataTable dt = new DataTable();<br />            da.Fill(dt);<br /><br />            // Cria uma coluna e Inclui uma expressão na coluna da tabela<br /><strong>            dt.Columns.Add(new DataColumn("totalCalculado", typeof(Decimal),"UnitPrice * UnitsInStock"));</strong><br /><br />            lstResultado.Items.Add("Cod.   , Preço   , Estoque  , Total");<br />            foreach (DataRow row in dt.Rows)<br />            	    lstResultado.Items.Add(row["ProductID"] + " "+ row["UnitPrice"] + " " + <br />            	                                     row["UnitsInStock"] + " " +row["totalCalculado"]);<br /> 	}

Executando o projeto iremos obter:

Aguarde mais artigos sobre ADO .NET.

Pegue o projeto completo aqui:
colunaCalculada_DT.zip

é referência em Visual Basic no Brasil e autor dos livros "Aprenda Rápido: ASP" e "ASP, ADO e Banco de Dados na Internet". Mantenedor do site macoratti.net.

Ver perfil