プロが教えるわが家の防犯対策術!

はじめて質問させていただきます。
システム作成初心者です。
下記環境にて構築しています。
---------------------------------------------
言語:ASP.NET
   JavaScript
開発環境:Visual Web Developer 2010 Express
データベース:SQLServer 2005
---------------------------------------------

1画面に、1ヶ月の日付が時系列で縦に表示された画面があります。
この画面に土曜日、日曜日、祝日も表示される訳ですが、
土・日・祝がきた場合、コード側で背景色をグレーアウトしたいと
考えています。
BackColorならプロパティ設定で変更は可能かと思われますが、
テーブルの行自体の背景色を変更するにはコード側での制御は不可能でしょうか?
リンクボタンがあり、そのボタンを押下すると前月、次月へと遷移される為、
動的に作成しています。)
ちなみにテーブル自体はHTMLのテーブルコントロールを使用しています。

** 画面イメージ *****
日付    備考
4/1(月) DBデータ
4/2(火) DBデータ


4/6(土) DBデータ ←背景色グレーアウト
********************

どなたかご教授の程、宜しくお願い致します。

A 回答 (2件)

「HTMLのテーブルコントロールを使用」ではなく、「ASP.NETの繰返し系コントロールでテーブルを表示」というのが正しい表現だと思います。


また、祝日の判定は別に判定メソッドが必要になります。

DBからTableAdapterなどでProductsオブジェクト(フィールド名"dt","comment")を1か月分取得し、asp:repeaterなどにDataBindします。
たとえば、tableのtrにbackgroundで表現するとすれば、aspxで

<table>
<tr>
<th>日付</th>
<th>備考</th>
</tr>
<asp:repeater id=Dailycomments runat=server>
<itemtemplate>
<tr background=<%# GetBgColor(Eval("dt")) %>>
<td><%# Eval("dt") %></td>
<td><%# Eval("comment") %></td>
</tr>
</itemtemplate>
</asp:repeater>
</table>

codefile側で、
this.Dailycomments.DataSource = Products;
でデータバインドすれば、バインド時にメソッド呼び出しが吐かれるので、

protected string GetBgColor(Object dt) {
var targetDate = dt as DateTime;
if (targetDate.DayOfWeek==0 || targetDate.DayOfWeek==6 || this.IsHoliday(targetDate)) {
return "#f0f0f0"; // light gray
} else {
return "#fffff";
}
}
のようなメソッドを用意しておいて答えを返すようにします。
「バインドクエリ」パターンですね。

このほかに、バインド時のonItemBoundイベントハンドラ中で行うやり方や、バインド完了後にRepeaterの行を舐める方法もあります。
自分だったらDataTableでなく、コレクションオブジェクトで読んでおき、"bkgcolor"なんてプロパティを水増して一発バインド。
    • good
    • 0

HTMLのテーブルコントロールをどんな風に使って出力しているのか、その部分のコードを記載すると回答がつくかもしれません。

この回答への補足

edp3142さん
ご回答ありがとうございます。
HTMLのテーブルコントロールの使用方法ですが、下記のように使用しています。
<table border="0" cellspacing="0" class="border-overlap" style="table-layout:fixed; margin-left:30px;">
  <tr class="listhead-color headHeight">
<td class="list" colspan="2" style="font-size:12px;" bgcolor="#a9a9a9" align="center" width="110px">
<asp:Label runat="server" Text="日付" />
</td>
<td class="list" style="font-size:12px;" bgcolor="#a9a9a9" align="center" width="50px">
<asp:Label runat="server" Text="実績工数" />
</td>
<td class="list" style="font-size:12px;" bgcolor="#a9a9a9" align="center" width="270px">
<asp:Label runat="server" Text="備考" />
</td>
</tr>
<tr id="ds_1">
<td width="100px" class="list" style="font-size:12px;">
<asp:Label ID="lbl_cost_1" runat="server" />
</td>
<td width="10px" class="list" align="center" style="font-size:12px;">
<asp:Label ID="lbl_cost_week_1" runat="server"/>
</td>
<td width="50px" class="list txt_ct" style="font-size:12px;">
<asp:TextBox ID="txt_cost_1" runat="server" Columns="2" CssClass="normal_off" />
</td>
<td width="270px" class="list" style="font-size:12px;">
<asp:TextBox ID="txt_cost_memo_1" runat="server" Columns="38" CssClass="normal_on" />
</td>
</tr>
     .
     .
又、土・日のフォントの色も変える必要があるのですが、これに関しては
動的な為コード側でIF文を使用して実装しています。
Me.lbl_cost_1.Text = mon & "月" & a & "日"
b = yyyy & "年" & mon & "月" & a & "日"
'曜日取得
Me.lbl_cost_week_1.Text = WeekdayName(Weekday(b)).Substring(0, 1)
'曜日設定
If WeekdayName(Weekday(b)).Substring(0, 1) = "土" Then
 Me.lbl_cost_1.ForeColor = Drawing.Color.Blue
ElseIf WeekdayName(Weekday(b)).Substring(0, 1) = "日" Then
 Me.lbl_cost_1.ForeColor = Drawing.Color.Red
END IF
追加でのご質問です。HTMLのTABLEコントロールのTRタグにIDを付与していますが、
コード側でTABLEコントロールのIDを取得する事は出来ないのでしょうか?

お忙しい中申し訳ございませんが、宜しくお願い致します。

補足日時:2010/08/11 09:11
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!