人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VisualStudio2005Pro(C#)とSQLServer2005で開発しています。バインド状態にあるDataGridView内で数量フィールド×金額フィールドの値を合計フィールドに表示し、更にデータベースの各フィールドへ結果を格納したいと思っています。これを実現するにはどうしたらいいでしょうか?ネット検索した結果、DataColumn.Expressionプロパティを使うまでは解ったんですがバインド状態にあるDataGridViewではどのようにしたらいいのかわかりません。サンプルや解りやすい解説をしたサイトなどあれば教えてください。

●質問者: artsnet111
●カテゴリ:コンピュータ
✍キーワード:C# Expression サイト データベース ネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● freemann
●35ポイント

以下に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");

}

◎質問者からの返答

バインドした状態の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);

}

この中に書くにはどうしたらいいですか?


2 ● freemann
●35ポイント

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の値は最新になりません。

◎質問者からの返答

できました。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ