以下にNorthwindを使ったサンプルのコードを載せます。
private void Form2_Load(object sender, EventArgs e)
{
string strConn, strSQL;
SqlConnectionStringBuilder bldr = new SqlConnectionStringBuilder();
bldr.DataSource = "PC名";
bldr.InitialCatalog = "Northwind";
bldr.IntegratedSecurity = true;
strConn = bldr.ConnectionString;
strSQL = "SELECT OrderID,ProductID,UnitPrice,Quantity,Discount FROM [Order Details]";
ds = new DataSet();
da = new SqlDataAdapter(strSQL, strConn);
DataTable dt = ds.Tables.Add("Order Details");
dt.Columns.Add("OrderID", typeof(int));
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("UnitPrice", typeof(decimal));
dt.Columns.Add("Quantity", typeof(int));
dt.Columns.Add("Discount", typeof(double));
dt.Columns.Add("TotalPrice", typeof(int), "UnitPrice * Quantity"); //コンストラスでExpressionを指定している。
SqlCommandBuilder cb = new SqlCommandBuilder(da);
da.Fill(ds, "Order Details");
dataGridView1.DataSource = ds.Tables[0];
}
private void button1_Click(object sender, EventArgs e)
{
da.Update(ds, "Order Details");
}
Expressionを使ったやり方ではないのですが、一応以下の手順でやればできるようです。
1)OrderDetailsDataSet.xsdを開きます。すると、ダイアログがあると思うのですが、その中のOrder DetailsTableAdapterのFill,GetData()の項目で右クリックで構成を選びます。
2)SELECT文が表示されるので、そこに UnitPrice * Quantity AS TotalPriceを追加。そうしたら、完了ボタンを押す。
3)フォームデザイナに戻ってDataGridViewを選択し、Columnsプロパティを開く。
4)追加ボタンを押すと新しいダイアログが出るので、上のデータバインド列にチェックを入れて、DataSourceの列でTotalPriceを選択する。そして追加ボタン。
以上で動くと思うのですが、注意点が一つ。
SQL文の結果からTotalPriceを取得しているため、UnitPriceやQuantityを変更した場合、保存ボタンを押してDBを更新しなければTotalPriceの値は最新になりません。
できました。ありがとうございます。
バインドした状態のDGVでの書き方を知りたいのです。
private void order_DetailsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.order_DetailsBindingSource.EndEdit();
this.order_DetailsTableAdapter.Update(this.nORTHWNDDataSet.Order_Details);
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: このコード行はデータを 'nORTHWNDDataSet.Order_Details' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
this.order_DetailsTableAdapter.Fill(this.nORTHWNDDataSet.Order_Details);
}
private void button1_Click(object sender, EventArgs e)
{
this.order_DetailsTableAdapter.Update(this.nORTHWNDDataSet.Order_Details);
}
この中に書くにはどうしたらいいですか?