質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

4907閲覧

c#のDataGridViewに合計列を追加したい

d_neko

総合スコア108

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/01/08 16:38

DBから読み込んで、DataGridViewに単価と数量を表示させることはできました。
そして、単価と数量を掛けた合計を表示させたいです。
とりあえず、合計の列を表示させる事まではできました。

合計欄に合計を表示させるにはどうすればいいのでしょうか。

また、単価や数量を変更した場合、合計を計算し直すには、
何のイベントに、そしてどのようにすればいいのでしょうか。

下が、DBから読み込んで、DataGridViewに単価と数量を表示されたであろうコードです。

private void Form1_Load(object sender, EventArgs e) { string connStr = "Data Source=localhost;Database=maria;User ID=user;password=password"; string selectStr = "SELECT tanka,kazu FROM item"; MySqlConnection cn = new MySqlConnection(connStr); MySqlDataAdapter da = new MySqlDataAdapter(selectStr, cn); DataTable dt = new DataTable(); da.Fill(dt); dataGridView1.DataSource = dt; DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn(); textColumn.Name = "sum"; textColumn.HeaderText = "sum"; dataGridView1.Columns.Add(textColumn); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/08 23:04

DataTable は DB のテーブルを PC のメモリ上に取得してそれをプログラムで操作するという ADO.NET の非接続型データアクセスのために使うというのがそもそもの設計思想にあるようです。それを DataDridView にバインドするということは、DB のテーブルのレコード一覧を表示する(必要があれば編集も)というのがそもそもの使い方です。なので、DataGridView に合計を表示すると言うのは設計思想と相容れないような気がします。専用の帳票アプリを使うことを検討されてはいかがです?
d_neko

2020/01/08 23:53

今、c#を勉強しています。 そして、DataGridViewがよくわからないので、思いついた事ができるか、いろいろ試しています。 だから、設計思想なんて難しいことは考えていません。 ADO.NETは、非接続型データアクセスのためだけでしょうか。 私は、接続型を試していると思ったのですが違うのでしょうか。
退会済みユーザー

退会済みユーザー

2020/01/09 00:50

> DataGridViewがよくわからないので、思いついた事ができるか、いろいろ試しています。 間違った方向に進むと質問者さんがいろいろ試す努力が無駄になるだけでなく、回答者・閲覧者を巻き込んで時間と労力の無駄になることが多いのでアドバイスしてます。人の意見・アドバイスは聞きたくないという訳ではないですよね、ここで質問しているのですから。 > ADO.NETは、非接続型データアクセスのためだけでしょうか。私は、接続型を試していると思ったのですが違うのでしょうか。 違います。前のスレッドで紹介した記事 https://docs.microsoft.com/ja-jp/previous-versions/cc482903(v=msdn.10) をもう少し読み進めれば分かるはず。
guest

回答3

0

投稿2020/01/09 03:30

YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

d_neko

2020/01/09 04:22

回答ありがとうございます。 質問しても、「専用の帳票アプリ」をすすめられたので、 質問を終わらすことにしました。 全くわからないなりにしらべた結果、 「データソースをバインド」ってワードをみつけたので、 「データソースをバインドするとできました。」とウソを書いて終わらすことにしました。 でも、手がかりをいただいたので、もうちょっとがんばります。
guest

0

ベストアンサー

もうちょっとがんばります。

ということなので、

合計欄に合計を表示させるにはどうすればいいのでしょうか。

というところまで書いておきます。そこまでは設計思想の範疇のようで(個人的意見です)ごく簡単にできます。

具体的には、質問のコードで、

string selectStr = "SELECT tanka,kazu FROM item";

となっているところを、

string selectStr = "SELECT tanka,kazu, tanka * kazu AS amount FROM item";

として DataTable に Fill すれば DataTable には自動的に amount 列が作られ tanka * kazu の値が代入されます。その DataTable を DataGridView にバインドすれば(BindingSource 経由が望ましい)、tanka, kazu, amount が表示されるはずです。

その先の、

また、単価や数量を変更した場合、合計を計算し直すには、

には簡単な方法はなさそうで、YAmaGNZ さんが書かれたようなイベントを利用して、計算し直して書き直すということになると思います。頑張ってください。

投稿2020/01/10 01:48

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

d_neko

2020/01/11 01:46

ありがとうございます。これが一番手っ取り早いです。 まさかこんな簡単な方法があるとは思いませんでした。
guest

0

データソースをバインドするとできました。
できたと思いましたができていませんでした。

質問しても、質問の追記・修正依頼に
「専用の帳票アプリを使うことを検討」
をすすめられるようなので諦めます。

投稿2020/01/09 00:01

編集2020/01/09 03:14
d_neko

総合スコア108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/01/09 00:38

この質問についた回答が「データソースにバインドしてください」だとどう思いますか? 自分だけにわかる言葉で書くのではなく、誰にでもわかるよう具体的に書いてください。初心者向けの質問なので、他の初心者にわかるように書く必要があります。
退会済みユーザー

退会済みユーザー

2020/01/09 00:42

回答になってないです。
Zuishin

2020/01/09 03:36

自分で作るより帳票アプリを使うのが簡単ではないかというおすすめだと思います。他に方法がないわけではありません。 YAmaGNZ さんの回答のようにイベントを使って計算しなおす方法もありますし、DataTable を使わず独自クラスを使う方法もあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問