C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

グリッドにデータを入れる関数?


(過去ログ 6 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■6737 / inTopicNo.1)  グリッドにデータを入れる関数?
  
□投稿者/ miyuki 二等兵(1回)-(2006/09/22(Fri) 23:28:25)

分類:[C#] 


分類:[C#] 

2006/09/22(Fri) 23:34:36 編集(投稿者)

C#で、グリッドにデータを表示したい時に、グリッドの表が

----------------------
| 年 | 1 | 2 | 3 | 4 |   ←項目名
----------------------
年|期にあった日付|日付|日付|日付| ←データ
----------------------
年|期にあった日付|日付|日付|日付|
----------------------


のような感じでデータが表示される時に、データベースは、

フィールド名
年(2001年とか2002年などの4桁の西暦)、期(1,2,3,4しか入っていない)、日付

という3つのフィールドで構成されている時は、
グリッドにデータを表示させたい場合、みなさんはどのように行っているのでしょうか?

foreach (Info info in list)
{
DataRow dataRow = dataTable.NewRow();
dataRow["年"] = info.year;
if(info.ki.Equals("1"))
{
dataRow["1"] = info.date;
}
else if(info.ki.Equals("2"))
{
dataRow["2"] = info.date;
}
else if(info.ki.Equals("3"))
{
dataRow["3"] = info.date
}
else if(info.ki.Equals("4"))
{
dataRow["4"] = info.date
}
dataTable.Rows.Add(dataRow);
}
grid.DataSource = dataTable;


今はこのような感じで、if文を使用し、ループでデータ毎に振り分けを行い、datasetに入れています。
ちゃんとorder句でデータを並べておかないとめちゃくちゃになります。
infoは、テーブル構成と同じフィールドを持ったgetter,setterになっています。
テーブル構成が、

フィールド名
年、1期の日付、2期の日付、3期の日付、4期の日付

というようなデータベースの構成なら、
foreach (Info info in list)
{

dataRow["年"] = info.year;
dataRow["1"] = info.1kiDate;
dataRow["2"] = info.2kiDate;
dataRow["3"] = info.3kiDate;
dataRow["4"] = info.4kiDate;
}

で楽なのにと思っているのですが、テーブル構成とグリッドの構成が違う場合、
ベテランの玄人の方ならどのように書いているのでしょうか?
汎用的な関数とかinfoをいじったりとか、dataRowをうまく利用したりしているのでしょうか?
私は、デザインパターンとかあまりよく分かっていないので、汚いロジックになってしまっています。
良いアドバイスなどありましたらお願いします。


0
引用返信 編集キー/
■6738 / inTopicNo.2)  Re[1]: グリッドにデータを入れる関数?
□投稿者/ επιστημη 少尉(124回)-(2006/09/22(Fri) 23:47:27)
επιστημη さんの Web サイト

分類:[C#] 

> テーブル構成とグリッドの構成が違う場合、
> ベテランの玄人の方ならどのように書いているのでしょうか?

テーブルとグリッドの対応表を用意しておくでしょうねぇ。


0
引用返信 編集キー/
■6744 / inTopicNo.3)  Re[2]: グリッドにデータを入れる関数?
□投稿者/ miyuki 二等兵(5回)-(2006/09/23(Sat) 15:09:42)

分類:[C#] 

2006/09/23(Sat) 15:10:39 編集(投稿者)

No6738に返信(επιστημηさんの記事)
>>テーブル構成とグリッドの構成が違う場合、
>>ベテランの玄人の方ならどのように書いているのでしょうか?
>
> テーブルとグリッドの対応表を用意しておくでしょうねぇ。
>
返信ありがとうございます。
これはクラスで用意しておくのが一番よいのでしょうか?
よろしくお願いします。

0
引用返信 編集キー/
■6745 / inTopicNo.4)  Re[3]: グリッドにデータを入れる関数?
□投稿者/ επιστημη 少尉(125回)-(2006/09/23(Sat) 15:58:41)
επιστημη さんの Web サイト

分類:[C#] 

>>テーブルとグリッドの対応表を用意しておくでしょうねぇ。
> 返信ありがとうございます。
> これはクラスで用意しておくのが一番よいのでしょうか?

ごめんなさい、なに言ってんだかわかんない。


0
引用返信 編集キー/
■6746 / inTopicNo.5)  Re[4]: グリッドにデータを入れる関数?
□投稿者/ だく 二等兵(8回)-(2006/09/23(Sat) 16:42:59)

分類:[C#] 

この例の場合、if文で振り分けなくても
↓これでも良いのでは?

foreach (Info info in list)
{
DataRow dataRow = dataTable.NewRow();
dataRow["年"] = info.year;
dataRow[info.ki] = info.date;
dataTable.Rows.Add(dataRow);
}
grid.DataSource = dataTable;


0
引用返信 編集キー/
■6772 / inTopicNo.6)  Re[4]: グリッドにデータを入れる関数?
□投稿者/ miyuki 二等兵(2回)-(2006/09/24(Sun) 21:31:28)

分類:[C#] 

No6745に返信(επιστημηさんの記事)
> >>テーブルとグリッドの対応表を用意しておくでしょうねぇ。
>>返信ありがとうございます。
>>これはクラスで用意しておくのが一番よいのでしょうか?
>
> ごめんなさい、なに言ってんだかわかんない。
>
すみません。
具体的に、テーブルとグリッドの対応表を作成するとはどういう事なのでしょうか?

だくさんアドバイスありがとうございます。
今は少し検討中です。
ちょっと私の頭ではいけるのか?いけないのか?まだはっきりと分かっていませんので、すぐやってみたいと思います。

0
引用返信 編集キー/
■6775 / inTopicNo.7)  Re[5]: グリッドにデータを入れる関数?
□投稿者/ επιστημη 少尉(132回)-(2006/09/24(Sun) 22:21:30)
επιστημη さんの Web サイト

分類:[C#] 

> 具体的に、テーブルとグリッドの対応表を作成するとはどういう事なのでしょうか?

つまりこの、テーブル上でのフィールド名とそれに対応するグリッド上の位置を対応表にしておいて、グリッドに配置するときにその対応表に基づけ、と。


0
引用返信 編集キー/
■6776 / inTopicNo.8)  Re[6]: グリッドにデータを入れる関数?
□投稿者/ miyuki 二等兵(3回)-(2006/09/24(Sun) 22:45:23)

分類:[C#] 

> つまりこの、テーブル上でのフィールド名とそれに対応するグリッド上の位置を対応表にしておいて、グリッドに配置するときにその対応表に基づけ、と。
返信ありがとうございます。
その対応表を作るというのは分かるのですが、
具体的に対応表ってどのようにプログラムで作成するのでしょうか?
よろしくお願いします。
----------------------------------
だくさんのやり方はかなり良い感じで成功しました。
(自分で投稿したプログラムも少し間違っていて、年数毎に行を作成しないといけないのに、毎回データ毎に行を作るという変なプログラムになっていました・・・もう一度しっかりと整理します)
やってみて少し問題が出たのですが、1期〜4期のデータは絶対に入っている事はないというのが問題です。
全てデータが入っていたらOKなのですが、
データが、
"2006","1","4/1"
"2006","2","7/1"
"2006","4","1/1"
という感じで3期のデータが入っていない場合は、
データ無しと表示しなくてはならないのです。
データ無し表示はどうしようか迷っています。
何か簡単な良いアイディアないでしょうか?

0
引用返信 編集キー/
■6778 / inTopicNo.9)  Re[7]: グリッドにデータを入れる関数?
□投稿者/ επιστημη 少尉(133回)-(2006/09/24(Sun) 23:00:55)
επιστημη さんの Web サイト

分類:[C#] 

> その対応表を作るというのは分かるのですが、
> 具体的に対応表ってどのようにプログラムで作成するのでしょうか?

文字列→文字列の辞書を作るならば

using System.Collections.Generic;

Dictionary<string,string> dic = new Dictionary<string,string>();
// 辞書に登録
dic["りんご"] = "apple";
dic["みかん"] = "orange";
dic["いちご"] = "strawberry";

// 辞書を引く
Console.WriteLine("{0} は英語で {1}", "りんご", dic["りんご"]);


0
引用返信 編集キー/
■6783 / inTopicNo.10)  Re[7]: グリッドにデータを入れる関数?
□投稿者/ επιστημη 少尉(137回)-(2006/09/24(Sun) 23:50:47)
επιστημη さんの Web サイト

分類:[C#] 

No6776に返信(miyukiさんの記事)
> 全てデータが入っていたらOKなのですが、
> ...
> という感じで3期のデータが入っていない場合は、
> データ無しと表示しなくてはならないのです。
> データ無し表示はどうしようか迷っています。
> 何か簡単な良いアイディアないでしょうか?

簡単な…始めにぜーんぶ"データ無し"で埋めておく。


0
引用返信 編集キー/
■6784 / inTopicNo.11)  Re[8]: グリッドにデータを入れる関数?
□投稿者/ だく 二等兵(11回)-(2006/09/25(Mon) 00:22:35)

分類:[C#] 

>年数毎に行を作成しないといけない

ということなので、↓こんな感じかな?

int _year = 0;

foreach (Info info in list)
{
if (info.year!=_year){
DataRow dataRow = dataTable.NewRow();
dataRow["年"] = info.year;
dataRow["1"] = "データ無し";
dataRow["2"] = "データ無し";
dataRow["3"] = "データ無し";
dataRow["4"] = "データ無し";
dataTable.Rows.Add(dataRow);
_year=info.year;
}
}

foreach (Info info in list) {
DataRow[] dataRows = dataTable.Select("年 = " + info.year);
dataRows[0][info.ki] = info.date;
}

grid.DataSource = dataTable;

0
引用返信 編集キー/
■6832 / inTopicNo.12)  Re[9]: グリッドにデータを入れる関数?
□投稿者/ miyuki 二等兵(4回)-(2006/09/26(Tue) 09:58:45)

分類:[C#] 

επιστημηさん、だくさんありがとうございました。
無事出来ました。
だくさんの
「dataTable.Select("年 = " + info.year)」
のフィルタ検索は知らなかったので、こんな便利な機能を教えていただき
大変ありがとうございました。
またif文でごちゃごちゃと書いてしまう所でした。
datatable,datarowの使い方が1パターンぐらいしか知らないので、
とても勉強になりました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -