CheckBox 付き Calendar コントロール
- チェックボックス付きのカレンダーを作りたいと思っています。
Calendar コントロールにて一日ごとにチェックボックスを表示し
ポストバック後に値を取得しようと考えました。
以下のように DayRender イベントのイベントデータを使用することにより
チェックボックスを登録することが出来るようになりました。
e.Cell.Controls.Add(new CheckBox());
しかし、別に表示しているボタンによるポストバック後に
チェックボックスを登録した Cell プロパティにアクセスする方法が分からないため
チェックボックスにもアクセスすることができません。
ポストバック後にチェックボックスの値を取得する方法はありますでしょうか?
よろしくお願いいたします。- 編集済みleereg 9 時間 58 分前記述ミス
すべての返信
昔、検証のために作ったコードですが、以下が参考になりませんか?
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Collections.Generic" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected List<DateTime> checkedDates = new List<DateTime>();protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
CheckBox cb = new CheckBox();
cb.ID = e.Day.Date.ToShortDateString();
string script = String.Format("javascript:__doPostBackOnCheckBoxClick('{0}');", cb.ID);
cb.Attributes.Add("onclick", script);
foreach (DateTime day in checkedDates)
{
if (e.Day.Date == day)
{
cb.Checked = true;
break;
}
cb.Checked = false;
}
e.Cell.Controls.Add(cb);
}protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
return;
}object obj = ViewState["CheckedDates"];
if (obj != null)
{
checkedDates = (List<DateTime>)obj;
}foreach (DateTime day in checkedDates)
{
if (ClickedCheckBoxID.Value == day.ToShortDateString())
{
checkedDates.Remove(DateTime.Parse(ClickedCheckBoxID.Value));
ClickedCheckBoxID.Value = String.Empty;
ViewState["CheckedDates"] = checkedDates;
return;
}
}
if (ClickedCheckBoxID.Value != String.Empty)
{
checkedDates.Add(DateTime.Parse(ClickedCheckBoxID.Value));
ClickedCheckBoxID.Value = String.Empty;
ViewState["CheckedDates"] = checkedDates;
}
}protected void Button1_Click(object sender, EventArgs e)
{
string str = "Selected Dates:";
foreach (DateTime day in checkedDates)
{
str += "<br />" + day.ToShortDateString();
}
Label1.Text = str;
}
</script><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>無題のページ</title>
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm)
{
theForm = document.form1;
}
function __doPostBackOnCheckBoxClick(checkBoxID)
{
if (!theForm.onsubmit || (theForm.onsubmit() != false))
{
theForm.ClickedCheckBoxID.value = checkBoxID;
theForm.submit();
}
}
//]]>
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type="hidden" name="ClickedCheckBoxID" id="ClickedCheckBoxID" value="" runat="server" />
<asp:Calendar ID="Calendar1" runat="server" ondayrender="Calendar1_DayRender"
SelectionMode="None" >
</asp:Calendar>
<asp:Button ID="Button1" runat="server" Text="チェックした日付を表示"
onclick="Button1_Click" />
<br />
<asp:Label ID="Label1" runat="server"></asp:Label>
</div>
</form>
</body>
</html>