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 SubUma 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








