私はいくつかの古いコード (私のものではない) に取り組んでいますが、残念ながら、ハードコードされたコードが多く含まれており、現在修正しようとしている問題を引き起こしています。ここに私の問題があります:
2 週間を表す 14 列のグリッドビューがあります。初日は、ユーザーの「タイプ」をチェックするコード内のブール値に応じて、月曜日または日曜日のいずれかになります。
現在、すべての日は次のようにレイアウトされています (これは日曜日の場合です)。
<asp:TemplateField HeaderText="SUN">
<footertemplate>
<asp:Label ID="lblD1F" runat="server" ForeColor="white" Width="35px" Text="<%# GetTotal(0).ToString() %>" />
</footertemplate>
<headertemplate>
<asp:Label ID="lblD1H" runat="server" CssClass="hdr_Day" Text="SUN"></asp:Label><br />
<asp:Label ID="lblD1D" runat="server" CssClass="hdr_Date" Text='<%# _displayDate.ToString("MM/dd") %>'></asp:Label>
</headertemplate>
<itemtemplate>
<anthem:TextBox id="tbDay1"
runat="server"
Text='<%# Bind("Day1") %>'
CssClass="tbWeekEnd"
AutoCallBack="true" />
<asp:Label ID="lblDay1" runat="server" Visible="false" Text='<%# Bind("Day1") %>'></asp:Label>
</itemtemplate>
<itemstyle cssclass="cell_weekend" />
</asp:TemplateField>
したがって、上記のように 14 日間セットアップすると、次のようになります。
今、ユーザーに基づいて、日曜日または月曜日に開始するようにしようとしていました。私は古い文字列の上に新しい文字列をハードコーディングしましたが、これはより多くの問題を引き起こし始めています。まず、2 つの定数文字列を作成しました。
String[] userADays = new String[] { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };
String[] userBDays = new String[] { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" };
protected void gvMasterProjects_RowDataBound(object sender, GridViewRowEventArgs e)
{
//This if/else statement overrides the hard coded date headers in the timeEntry aspx files since the days were hardcoded in.
//Populates the cells w/ the data from one of two arrays depending if the user is A or B.
if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.CssClass = "HeaderStyle";
if (isUserB == false)
{
for (int i = 9; i < 23; i++)
{
e.Row.Cells[i].Font.Size = 10;
e.Row.Cells[i].Text = userADays[i - 9] + "\n" + " " + _displayDate.AddDays(i-9).ToString("MM/dd") + " ";
}
}
else
{
for (int i = 9; i < 23; i++)
{
e.Row.Cells[i].Font.Size = 10;
e.Row.Cells[i].Text = UserBDays[i - 9] + "\n" + " " + _displayDate.AddDays(i - 9).ToString("MM/dd") + " ";
}
}
}
.aspx ファイルのグリッドビューは次のとおりです。
<anthem:GridView
ID="gvMasterProjects"
runat="server"
AutoGenerateColumns="false"
ShowFooter="true"
OnRowDataBound="gvMasterProjects_RowDataBound"
AllowPaging="false"
EnableViewState="true"
HorizontalAlign="Center"
AlternatingRowStyle-CssClass="AlternatingRowStyle"
RowStyle-CssClass="RowStyle"
HeaderStyle-CssClass="HeaderStyle" style="margin-left: 71px">
私は本当にこのハードコーディングをやめたいと思っています。現在行われていることを行わずに、これらの日付をロードする簡単な方法が必要です。どんな助けでも大歓迎です。
編集:以下の回答を試みましたが、実行される「UpdateAfterCallBack」行が多く、日付が.aspxのハードコードされた日付に戻されることを除いて機能します。.aspx でこれを行う簡単な方法はありますか?