DataColumn型のExpressionに数式を書き込むことによって、クライアント側でデータベースから取得したレコード毎に計算をしてその結果をDataGridView等で表示できます。
各レコード毎に数式を書き込むときは、カラム名を使ってどの列かを指定します。
例えば、UnitPriceというカラムとQuantityというカラムから、売上額を出したい場合は、"UnitPrice * Quantity"という文字列で表します。
Expression内で使える関数もありますので、参考資料を参照してみてください。
C#
//SQL Serverの場合はこれを追加 using System.Data.SqlClient; namespace ADONET_Expression { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); //SQL Serverへの接続情報の設定をします。 SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); //ここではWindows認証を使うに設定します。 builder.IntegratedSecurity = true; builder.InitialCatalog = "AdventureWorks2008"; //インスタンス名を設定します。 builder.DataSource = ".\\SQLExpress"; //接続情報を使ってコネクションを生成します。 using (SqlConnection conn = new SqlConnection(builder.ConnectionString)) { //SQL文とコネクションを設定します。 using (SqlCommand cmd = new SqlCommand("SELECT T1.SalesOrderID, OrderQty, UnitPrice, LineTotal, LT FROM Sales.SalesOrderDetail AS T1 INNER JOIN (SELECT SalesOrderID, SUM(LineTotal) AS LT FROM Sales.SalesOrderDetail GROUP BY SalesOrderID) AS T2 ON T1.SalesOrderID = T2.SalesOrderID", conn)) { //SQL Serverへの橋渡しのアダプターを設定します。 SqlDataAdapter sda = new SqlDataAdapter(); //SELECTコマンドを設定します。 sda.SelectCommand = cmd; //SELECTの実行及びフェッチ sda.Fill(dt); //DataTableに計算式を使うためのカラムを追加する処理 DataColumn dc = new DataColumn(); //ここでは、小数点以下も使うためにDouble型を指定しましたが、 //特にしていなくてもこの場合はよいです。 dc.DataType = System.Type.GetType("System.Double"); //カラム名を指定します dc.ColumnName = "Percentage"; //計算式を設定。 //ここでは、各注文ごとの割合を計算します。 //桁数を制限するためにConvert関数で整数型に変換しています。 dc.Expression = "Convert(10000 * LineTotal / LT, 'System.Int32') / 100"; //dc.Expression = "100 * LineTotal / LT"; //DataTableにカラムを追加 dt.Columns.Add(dc); //グリッドに表示します。 dataGridView1.DataSource = dt; } } } } }
VB.NET
'SQL Serverなのでこれを設定します。 Imports System.Data.SqlClient Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim dt As DataTable = New DataTable() 'SQL Serverへの接続情報の設定をします。 Dim builder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder() 'ここではWindows認証を使うに設定します。 builder.IntegratedSecurity = True builder.InitialCatalog = "AdventureWorks2008" 'インスタンス名を設定します。 builder.DataSource = ".\SQLExpress" '接続情報を使ってコネクションを生成します。 Using conn As New SqlConnection(builder.ConnectionString) 'SQL文とコネクションを設定します。 Using cmd As New SqlCommand("SELECT T1.SalesOrderID, OrderQty, UnitPrice, LineTotal, LT FROM Sales.SalesOrderDetail AS T1 INNER JOIN (SELECT SalesOrderID, SUM(LineTotal) AS LT FROM Sales.SalesOrderDetail GROUP BY SalesOrderID) AS T2 ON T1.SalesOrderID = T2.SalesOrderID", conn) 'SQL Serverへの橋渡しのアダプターを設定します。 Dim sda As SqlDataAdapter = New SqlDataAdapter() 'SELECTコマンドを設定します。 sda.SelectCommand = cmd 'SELECTの実行及びフェッチ sda.Fill(dt) 'DataTableに計算式を使うためのカラムを追加する処理 Dim dc As DataColumn = New DataColumn() 'ここでは、小数点以下も使うためにDouble型を指定しましたが、 '特にしていなくてもこの場合はよいです。 dc.DataType = System.Type.GetType("System.Double") 'カラム名を指定します dc.ColumnName = "Percentage" '計算式を設定。 'ここでは、各注文ごとの割合を計算します。 '桁数を制限するためにConvert関数で整数型に変換しています。 dc.Expression = "Convert(10000 * LineTotal / LT, 'System.Int32') / 100" 'dc.Expression = "100 * LineTotal / LT" 'DataTableにカラムを追加 dt.Columns.Add(dc) 'グリッドに表示します。 DataGridView1.DataSource = dt End Using End Using End Sub End Class
良い | やや良い | 普通 | やや悪い | 悪い |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
投稿日時 | 評価 | コメント |
---|