DOBON.NET DOBON.NETプログラミング掲示板過去ログ

dataGridの足し算(C#)

環境/言語:[C#]
分類:[.NET]

データグリッド
名前  | 点数
-----------------
Aさん  | 20
Bさん  | 50
Cさん  | 60
Bさん  | 40
Aさん  | 30
Cさん  | 70
Dさん  | 20
Dさん  | 30

データグリットに上記のデータが入ってるときにAさんの総得点、
Bさんの総得点、Cさんの総得点、Dさんの総得点を出すにはどうすればいいのでしょうか?(名前が何個でも対応できるように。)
総得点は1つのラベルに改行して表示させるようにしたいです。
一日考えても全然わかりませんでした・・・。
誰かHELPお願いします・・・。
■No1781に返信(ウッチーさんの記事)
> 一日考えても全然わかりませんでした・・・。
> 誰かHELPお願いします・・・。

#このような書き方は印象を悪くし、逆効果ですので、やめた方がいいと思いますよ。

#ウッチーさんは No1726 に投稿した SEIKOさん と同じ人ですか?もしそうであれば、「最低限のマナー」として、「一貫した名前を使うこと」と明記していますので、今後はどちらかのお名前のみを使うようにしてください。

> データグリットに上記のデータが入ってるときにAさんの総得点、
> Bさんの総得点、Cさんの総得点、Dさんの総得点を出すにはどうすればいいのでしょうか?(名前が何個でも対応できるように。)

かなりいろいろな方法が考えられますが、その一つとして、Hashtableを使う方法が考えられるでしょう。(もしかしたらもっといい方法があるかもしれませんが。)

次の例では、dtというDataTableにデータが入っているものとしています。

Hashtable ht = new Hashtable();

//すべての列のデータを取得
foreach (DataRow dr in dt.Rows)
{
//名前の取得
string name = (string) dr[0];
//得点の取得
int num = (int) dr[1];
if (ht.ContainsKey(name))
{
//Hashtableにあるときは、総得点を取得して足す
num += (int) ht[name];
//削除
ht.Remove(name);
}
//Hashtableに追加
ht.Add(name, num);
}

//結果表示
foreach (string name in ht.Keys)
Console.WriteLine("名前:{0}/得点:{1}",
name, (int) ht[name]);


> 総得点は1つのラベルに改行して表示させるようにしたいです。

これに関しては説明しませんが、ラベルは文字列を改行して表示させる目的には向いていないでしょう。

DOBON.NET | プログラミング道 | プログラミング掲示板