• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:はじめて質問させていただきます。)

ASP.NETで日付の背景色を制御する方法

このQ&Aのポイント
  • ASP.NETで日付の背景色を制御する方法を教えてください。
  • 画面に縦に日付が表示され、土曜日、日曜日、祝日は背景色をグレーアウトしたいです。
  • HTMLのテーブルコントロールを使用しています。リンクボタンを押下すると前月、次月へと遷移されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • aspnet
  • ベストアンサー率79% (72/91)
回答No.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"なんてプロパティを水増して一発バインド。

その他の回答 (1)

noname#259269
noname#259269
回答No.1

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

blueblood-ai10
質問者

補足

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を取得する事は出来ないのでしょうか? お忙しい中申し訳ございませんが、宜しくお願い致します。

関連するQ&A