|
分類:[.NET 全般]
VisualStudio 2008 で、VBでのAsp.netの開発をしています。
※これまでVisualBasic6時代のフォームアプリケーションの開発経験しかなく、
.net的な考え方に慣れておらず初歩的な質問かもしれませんがよろしくお願いします
テーブルコントロールに、動的に行・セルを追加していきたいのですが、
MSDNによると下のようなコードがありました。
For rowCtr = 1 To rowCnt
Dim tRow As New TableRow()
For cellCtr = 1 To cellCnt
Dim tCell As New TableCell()
tCell.Text = "Row " & rowCtr & ", Cell " & cellCtr
tRow.Cells.Add(tCell)
Next
Table1.Rows.Add(tRow)
Next
この例は横方向への繰り返し内容が同じような内容なのでこれでよいのでしょうが、
例えばセルが3つあり、1セル目に3月1日からの日付、2セル目に曜日、3セル目に
休みかどうかの区分を表示したい、と考え以下のようにしました。
For rowCtr = 1 To rowCnt
Dim tRow As New TableRow()
For cellCtr = 1 To cellCnt
Dim tCell As New TableCell()
Select Case cellCtr
Case 1
tCell.Text = DateAdd("d", rowCnt - 1, "2015/3/1")
Case 2
tCell.Text = Choose(Weekday(DateAdd("d", rowCnt - 1, "2015/3/1")), "日", "月", "火", "水", "木", "金", "土")
Case 3
If Weekday(DateAdd("d", rowCnt - 1, "2015/3/1")) = 1 Or Weekday(DateAdd("d", rowCnt - 1, "2015/3/1")) = 7 Then
tCell.Text = "休み"
Else
tCell.Text = "平日"
End If
End Select
tRow.Cells.Add(tCell)
Next
Table1.Rows.Add(tRow)
Next
しかしこの方法では、セルが増えたらCaseを追加しなければなりませんし、また
途中に別なセルを挿入したくなった場合など、「Case XX」の部分を直さなければ
ならず、効率がよくありません。
そこで、内側のForやSelectを使わずに書きたいのですが、うまくいきません。
理想としては下のような感じです。
Dim datHiduke As Date
Dim intWeekDay As Integer
For rowCtr = 1 To rowCnt
Dim tRow As New TableRow()
Dim tCell As New TableCell()
'日付
datHiduke = DateAdd("d", rowCnt - 1, "2015/3/1")
tCell.Text = Format$(datHiduke, "yyyy/MM/dd")
tRow.Cells.Add(tCell)
'曜日
intWeekDay = Weekday(datHiduke)
tCell.Text = Choose(intWeekDay, "日", "月", "火", "水", "木", "金", "土")
tRow.Cells.Add(tCell)
'休み区分
If intWeekDay = 1 Or intWeekDay = 7 Then
tCell.Text = "休み"
Else
tCell.Text = "平日"
End If
tRow.Cells.Add(tCell)
Next
Table1.Rows.Add(tRow)
しかし、この方法では最後のセル(平日)しか追加されません。
tCellが1個しかないからなのか?と思い以下のようにしたところ、
'日付
Dim tCell As New TableCell()
datHiduke = DateAdd("d", rowCnt - 1, "2015/3/1")
tCell.Text = Format$(datHiduke, "yyyy/MM/dd")
tRow.Cells.Add(tCell)
'曜日
Dim tCell As New TableCell()
intWeekDay = Weekday(datHiduke)
tCell.Text = Choose(intWeekDay, "日", "月", "火", "水", "木", "金", "土")
tRow.Cells.Add(tCell)
'休み区分
Dim tCell As New TableCell()
If intWeekDay = 1 Or intWeekDay = 7 Then
tCell.Text = "休み"
Else
tCell.Text = "平日"
End If
tRow.Cells.Add(tCell)
「tCellはすでに存在しています」と怒られてしまいます。
For〜Nextで回すのだと何度Dimしてもいいのに、なぜこれではダメなのかというのも疑問点です。
Cellの追加をForで回さずに行うとしたら、どのような方法が一番いいのでしょうか。
よろしくお願いします。
|