问一个让我头疼3天的问题.关于日期控件
首先我感谢看贴子的人,有点麻烦.有时间的朋友详细看下.
日期控件高级应用问题.我做的是一个添加公休日的界面.
我自己改写了日期控件Calendar,
HTML代码如下:
<table>
<tr>
<td align="right" colspan="8" style="height: 1px">
年:<asp:TextBox ID="txtYear" runat="server" MaxLength="4" CssClass="TextBox" ></asp:TextBox>
月:<asp:DropDownList ID="dropMonth" runat="server" CssClass="DropDownList" OnSelectedIndexChanged="dropMonth_SelectedIndexChanged" AutoPostBack="True">
<asp:ListItem Value="01">一月</asp:ListItem>
<asp:ListItem Value="02">二月</asp:ListItem>
<asp:ListItem Value="03">三月</asp:ListItem>
<asp:ListItem Value="04">四月</asp:ListItem>
<asp:ListItem Value="05">五月</asp:ListItem>
<asp:ListItem Value="06">六月</asp:ListItem>
<asp:ListItem Value="07">七月</asp:ListItem>
<asp:ListItem Value="08">八月</asp:ListItem>
<asp:ListItem Value="09">九月</asp:ListItem>
<asp:ListItem Value="10">十月</asp:ListItem>
<asp:ListItem Value="11">十一月</asp:ListItem>
<asp:ListItem Value="12">十二月</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<asp:Calendar ID="Calendar1" runat="server" Height="600px" NextMonthText="下一月" OnDayRender="Calendar1_DayRender" SelectedDate="<%# GetDate() %>" PrevMonthText="上一月" Width="100%" SelectionMode="None" ForeColor="Black" OnSelectionChanged="Calendar1_SelectionChanged" Font-Size="10pt" BackColor="Gainsboro" BorderColor="Black" Font-Names="Times New Roman" ShowTitle="False" DayNameFormat="Full" NextPrevFormat="FullMonth" TitleFormat="Month" ShowGridLines="True">其他样式(略)</asp:Calendar>
</table>
我实现的是在日期控件上点选日期,并为此天选择休假类型(1假日2法定假日)和备注(remark)
数据表字段为: YY(年) MM(月) DD(日) HolidayKind(休假类型) Remark(备注) 我定义的都为String型 实现添加假日记录
页面后台:首先实例化MODEL实体类 和 BLL
HolidaySet holidayset = new HolidaySet();
HolidaysSetModel holidaysetModel = new HolidaysSetModel();
private static DateTime date = new DateTime();
后台定义了OnDayRender="Calendar1_DayRender"事件
代码如下:
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
//获取表示在日历控件中的日期CalendarDay
CalendarDay d = ((DayRenderEventArgs)e).Day;
//获取表示在日历控件中单元格的TableCell
TableCell c = ((DayRenderEventArgs)e).Cell;
//生成单元格的日期是否属于显示的月份,如果不属于显示的月份,则清除此单元格里的内容
if (d.IsOtherMonth)
{
c.Controls.Clear();
}
else
{
try
{
DateTime dt = d.Date;
//显示超连接,自定义一个HyperLink,并设置好属性
HyperLink aHyperLink = new HyperLink();
aHyperLink.ImageUrl = "~/images/add_small.gif";
aHyperLink.ToolTip = "设置假日?";
//aHyperLink.NavigateUrl = "#?day=" + d.Date.ToShortDateString(); 这个跳转页面只是单条记录添加,已经实现,不想用这方法.
string day2 = d.Date.ToShortDateString();
aHyperLink.Attributes.Add("onclick", "AddHolidayset('" + day2 + "')");
btnClose.Attributes.Add("onclick", "HideFlyBar(); return false;");
//将HyperLink加到日历控件上去
c.Controls.Add(new LiteralControl(" " + " " + " " + " "));
c.Controls.Add(aHyperLink);
}
catch (Exception exc)
{
Response.Write(exc.ToString());
}
HolidaySet holidayset = new HolidaySet(); //实例化业务逻辑
HolidaysSetModel holidaysetModel = new HolidaysSetModel(); //实力化实体
DataSet ds = holidayset.LookHolidaySetInfo(holidaysetModel);
DataRow[] dr;
dr = ds.Tables[0].Select("YY='" + txtYear.Text + "'and MM='" + dropMonth.SelectedValue + "' and DD='" + d.DayNumberText + "'");
holidaysetModel.YY = txtYear.Text.Replace("'", "");
holidaysetModel.MM = dropMonth.SelectedValue;
holidaysetModel.DD = d.DayNumberText;
bool ExistHoliday = holidayset.ExistHoliday(holidaysetModel);
if (ExistHoliday)
{
string HText = dr[0]["HolidaysKind"].ToString();
string bb = dr[0]["ReMark"].ToString();
Label a = new Label();
if (HText == "1")
{
a.Text = "假日" + "---" + bb;
}
else if (HText == "2")
{
a.Text = "法定假日" + "---" + bb;
}
c.Controls.Add(a);
c.Controls.Add(new LiteralControl("<br>"));
}
}
}
我想实现点最终提交按钮的时候,把日期控件上对应日期的直一起存如数据库中.
但是protected void btnADD_Click(object sender, EventArgs e)事件中 不能实现用((lable)Calendar1.FindControl("控件ID")).Text这种方法
-----------------------------------------------------------
所以我做了点击日期时候弹出DIV层里面添加休假类型和备注 然后点确定 把类型和备注用lable保存在日期控件上并显示.
protected void btnOk_Click(object sender, EventArgs e)
{
string a = hd1.Value;
DateTime dt = Convert.ToDateTime(a); /取到点击的日期
DataTable dts;
if (Session["datatable"] == null)
{
dts = CreateTable();
Session["datatable"] = dts;
}
dts = Session["datatable"] as DataTable;
DataRow dr = dts.NewRow();
dr[0] = txtYear.Text.Replace("'", "");
dr[1] = dropMonth.SelectedValue;
dr[2] = dt.Day.ToString();
dr[3] = ddlHolidaysKind.SelectedValue;
dr[4] = txtRemark.Text;
dts.Rows.Add(dr);
Session["datatable"] = dts;
}
上面这里我想到了建DataTable把数据暂时存DataTable中,用session保存.最后提交直接去取Datatable中的数据. 这遇到问题了,此方法能实现添加一个日期并显示在控件的对应日期上,但是当再添加其他日期的时候就显示不出了.数据都集中存在datatabel中.但是界面上显示不出标记,是否这天已添加,看不出来.
有没有高手指点下,我应该用什么方法,才能实现这个页面,多条记录添入数据表中啊并且完美些. 我现在这方法行的通么?错在哪?还有什么好方法吗? 谢谢,指点下小弟.感激不尽!
在线等.......
[解决办法]
怎么不先选择日期的时候传给一个控件或者变量先??
[解决办法]
Label a = new Label(); //这个备注移上来,这个会生成span//显示超连接,自定义一个HyperLink,并设置好属性 HyperLink aHyperLink = new HyperLink(); aHyperLink.ImageUrl = "~/images/add_small.gif"; aHyperLink.ToolTip = "设置假日?"; //aHyperLink.NavigateUrl = "#?day=" + d.Date.ToShortDateString(); 这个跳转页面只是单条记录添加,已经实现,不想用这方法. string day2 = d.Date.ToShortDateString(); aHyperLink.Attributes.Add("onclick", "AddHolidayset( '" + day2 + " ','" + a.ClientID + "')"); //这里把Label的iD传进去 btnClose.Attributes.Add("onclick", "HideFlyBar(); return false;"); if (ExistHoliday) { string HText = dr[0]["HolidaysKind"].ToString(); string bb = dr[0]["ReMark"].ToString(); if (HText == "1") { a.Text = "假日" + "---" + bb; } else if (HText == "2") { a.Text = "法定假日" + "---" + bb; } c.Controls.Add(a); c.Controls.Add(new LiteralControl(" <br >")); } 弹出层里添加直接加到数据库,不要用Session保存,不过在关闭层时要调用脚本将填写的备注值 对备注Label进行更改
[解决办法]
jf
代码看着累
[解决办法]
顶
[解决办法]
也在做一個行事曆,也與道類似問題..樓主加油...
[解决办法]
太幸福了!
我最近做的项目中就是遇见这个难题了,没想到在这里看见了,先顶,然后慢慢拜读!
有不懂的地方希望楼主赐教!
[解决办法]
jf
[解决办法]
分
[解决办法]
你要的是每天都有信息提示的日历不?
我刚好做过
建议你不要用自带的日历控件
自己画出来一个
问题就解决了