- PR -

DataViewでの抽出

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-10 19:09
引用:

なおこ(・∀・)さんの書き込み (2006-01-10 18:39) より:

これではだめですかね...。

row["曜日"] = currentDay.ToString("ddd");


これだと、

引用:

{"(日)","(月)","(火)","(水)","(木)","(金)","(土)"};


という決め打ちフォーマットが使える保証がないので、フォーマットを指定する必要があります。

やはり、AddDays メソッドを使って、その値から DayOfWeek プロパティを見た方が簡単でしょう。せっかく配列を用意してあるんですからね。(^^;)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-01-11 05:08
引用:

C#初心者さんの書き込み(2006-01-10 16:32)より:
コード:
DateTime today=new DateTime(2005,12,16); 
string[]weeks={"(日)","(月)","(火)","(水)","(木)","(金)","(土)"}; 

// DataSetのテーブルにレコードを追加する 
for(i=16; i<=31; i++) 
{
    dt.Rows.Add(new object[]
        {
            i + " "
            + weeks[((int) today.DayOfWeek) + 1]
        }
    );
}




 これ、C# だと思いますが、コンパイル通りました?C# って、数字から文字列への変換って、行われるんでしたっけ?

 i は、16 から 31 まで変化します。これは、年月日のうちの「日」を表していますね。では、その「日」が表現されるところは、どこでしょう?「((int) today.DayOfWeek) + 1」でしょうか?しかし、today は new DateTime(2005, 12, 16) で、固定されています。

 また、DayOfWeek は 0 が「日曜日」を表します。そして C# の配列の基数は 0 です。1 を足すと、日曜日が表現できないばかりか、土曜日がインデックスの範囲外を示してしまいます。

 それと、試していませんが、
コード:
DateTime today=new DateTime(2005,12,16); 
for (i = 16; i <= 31; i++) {
	dt.Rows.Add(new object[]
		{ today.ToString("d (ddd)") }
	);
}


で同じになるんじゃないかと(詳しくは、「書式指定子」を調べてください)。

さらに、12月は31日までありますが、11月は30日までですよね?


以上5点、気になったので。
___________________________________
□ written by Jitta on 2006/01/10
_________________
C#初心者
常連さん
会議室デビュー日: 2005/12/22
投稿数: 24
投稿日時: 2006-01-11 10:10
AddDAYを利用することでうまくやりたいことができました。

皆さん、本当にありがとうございました。
C#初心者
常連さん
会議室デビュー日: 2005/12/22
投稿数: 24
投稿日時: 2006-01-12 15:37
新しいスレを作るのは申し訳ないので、ここで質問させてください。

実績Mから、出社時間と、退社時間を取得し、計算し、就労という項目に格納しようと思っています。
しかし、文字列なので連結してしまいます。1000+1800=10001800
Parseを利用すればいいみたいなのですが、下のプログラムで利用できる書き方が分からず、困っています。よろしくお願いします。

da = new System.Data.OleDb.OleDbDataAdapter(
"SELECT 社員No,出社,退社 FROM 実績M ", cn);
da.Fill(ds, "実績M");

dc=ds.Tables["実績M"].Columns.Add("就労");
dc.Expression="出社+退社";

dv = new DataView(ds.Tables["実績M"],"" ,"", DataViewRowState.CurrentRows);
dataGrid1.DataSource = dv;
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-12 16:02
引用:

C#初心者さんの書き込み (2006-01-12 15:37) より:

新しいスレを作るのは申し訳ないので、ここで質問させてください。


いやいや、別の質問は新しいスレッドを建ててください。
@IT 会議室は情報共有の場らしいですから、分けないと情報が埋もれてしまいます。

引用:

しかし、文字列なので連結してしまいます。1000+1800=10001800
Parseを利用すればいいみたいなのですが、下のプログラムで利用できる書き方が分からず、困っています。よろしくお願いします。


とりあえず変数に取りましょう。
ToString メソッドで文字列にしてから Integer.Parse メソッドを実行するとか。
Convert.ToInt32 メソッドでダイレクトに、でも出来ます。(ただし遅い)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-01-12 19:29
 ふむ。午前10時だから "1000" と。午後10時は "2200" ね。じゃぁ、午前7時まで、つまり徹夜したらどうなります?

"0700"?それだと「徹夜した」情報が失われますね。
"3100"?それだと単純にはパース出来ませんね。
___________________________________
□ written by Jitta on 2006/01/12
_________________

スキルアップ/キャリアアップ(JOB@IT)