读书人

问一个让小弟我头疼3天的有关问题.关于

发布时间: 2012-01-02 22:40:04 作者: rapoo

问一个让我头疼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;
}

上面这里我想到了—ataTable把数据暂时存DataTable中,用session保存.最后提交直接去取Datatable中的数据. 这遇到问题了,此方法能实现添加一个日期并显示在控件的对应日期上,但是当再添加其他日期的时候就显示不出了.数据都集中存在datatabel中.但是界面上显示不出标记,是否这天已添加,看不出来.

有没有高手指点下,我应该用什么方法,才能实现这个页面,多条记录添入数据表中啊并且完美些. 我现在这方法行的通么?错在哪?还有什么好方法吗? 谢谢,指点下小弟.感激不尽!



在线等.......

[解决办法]
怎么不先选择日期的时候传给一个控件或者变量先??
[解决办法]

C# code
                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
[解决办法]

[解决办法]
你要的是每天都有信息提示的日历不?
我刚好做过
建议你不要用自带的日历控件
自己画出来一个
问题就解决了

读书人网 >asp.net

热点推荐