2014-04-03 41 views
0
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Calendar.ascx.cs" Inherits="WebUserControl" %> 
<table> 
    <tr> 
    <td width="100%"> 

     <asp:DropDownList ID="ddlyear" runat="server" 
      onselectedindexchanged="ddlyear_SelectedIndexChanged" AutoPostBack="true"> 

       <asp:ListItem Text="2014" Value="2014" Selected="True"></asp:ListItem> 
       <asp:ListItem Text="2015" Value="2015"></asp:ListItem> 
       <asp:ListItem Text="2016" Value="2016"></asp:ListItem> 
       <asp:ListItem Text="2017" Value="2017"></asp:ListItem> 
       <asp:ListItem Text="2018" Value="2018"></asp:ListItem> 
       <asp:ListItem Text="2019" Value="2019"></asp:ListItem> 
       <asp:ListItem Text="2020" Value="2020"></asp:ListItem> 
       <asp:ListItem Text="2021" Value="2021"></asp:ListItem> 
       <asp:ListItem Text="2022" Value="2022"></asp:ListItem> 
       <asp:ListItem Text="2023" Value="2023"></asp:ListItem> 
       <asp:ListItem Text="2024" Value="2024"></asp:ListItem> 

     </asp:DropDownList> 
    </td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td width="100%" dir="ltr"> 

     <asp:DataList ID="DataList1" runat="server" HorizontalAlign="Center" 
      RepeatDirection="Horizontal" RepeatColumns="4" 
      onitemdatabound="DataList1_ItemDataBound" 
      > 
     <HeaderTemplate> 

     </HeaderTemplate> 
     <ItemTemplate> 
      <asp:Label ID="txt1" runat="server" Text='<%#Eval("Month") %>' Visible="false" Font-Names="Arial"></asp:Label> 
      <asp:HiddenField ID="hdn1" runat="server" /> 
      <asp:Calendar ID="Calendar1" runat="server" NextPrevFormat="CustomText" SelectionMode="Day" NextMonthText="" PrevMonthText="" Font-Names="A" OtherMonthDayStyle-BorderStyle="NotSet" OtherMonthDayStyle-Wrap="False" OtherMonthDayStyle-ForeColor="#CCCCCC" > 
      <TitleStyle 
       BackColor="#6EC347" 
       ForeColor="White" 
       Height="36" 
       Font-Size="Large" 
       Font-Names="Arial" 
       /> 
        <SelectedDayStyle 
       BackColor="Green" 
       BorderColor="SpringGreen" 
       /> 
      </asp:Calendar> 
     </ItemTemplate> 
     </asp:DataList> 
    </td> 
    </tr> 
    </table> 

相應ascx.cs文件取消選擇日期

public partial class WebUserControl : System.Web.UI.UserControl 
{ 
    int month = 1; 
    public event EventHandler YearChanged; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      loadcalendar(); 

     } 

    } 
    private void loadcalendar() 
    { 

     DataTable dt = new DataTable(); 
     dt.Columns.Add("Month", typeof(string)); 
     dt.Rows.Add("January"); 
     dt.Rows.Add("February"); 
     dt.Rows.Add("March"); 
     dt.Rows.Add("April"); 
     dt.Rows.Add("May"); 
     dt.Rows.Add("June"); 
     dt.Rows.Add("July"); 
     dt.Rows.Add("August"); 
     dt.Rows.Add("September"); 
     dt.Rows.Add("October"); 
     dt.Rows.Add("Novemeber"); 
     dt.Rows.Add("December"); 

     DataList1.DataSource = dt; 
     DataList1.DataBind(); 

    } 

    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item || 
       e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      string year = ddlyear.SelectedValue.ToString(); 
      String str = ((Label)e.Item.FindControl("txt1")).Text; 

      DateTime Now = DateTime.Now; 
      DateTime TempDate = new DateTime(Convert.ToInt32(year), month, 1); 

      // DateTime TempDate = new DateTime(Now.Year,Now.Month, 1); 
      ((Calendar)e.Item.FindControl("Calendar1")).VisibleDate = TempDate; 
      month = month + 1; 
      //((Calendar)e.Item.FindControl("Calendar1")).SelectedDates.Clear(); 
     } 

    } 

    protected void ddlyear_SelectedIndexChanged(object sender, EventArgs e) 
    { 

      loadcalendar(); 
      YearChanged(sender, e); 

    } 

} 

我需要一次再次單擊取消選擇日期。此代碼將在頁面中顯示12個月的日曆。我在一些論壇上讀到我應該在calendar_selectedchange事件中給我的代碼。如何在我的代碼中使用?如果還有其他方法可以通過以下代碼取消選擇日期?

+0

http://stackoverflow.com/questions/2627716/deselect-dates-in-asp-net-calendar-control的可能的複製? –

回答

0

,我猜你要選擇多個日期,所以

here's the solution(asp.net論壇)

here's the theory(MSDN)

EDIT(再次)

<asp:Calendar ID="Calendar1" runat="server" onSelectionChanged="onSelectionChanged" 
OnDayRender="onDayRender"> 

代碼隱藏

int month = 1; 
    public event EventHandler YearChanged; 

    //I've stored the selected date in the session. 
    //There are others workaround, like saving it in the ViewState or in a db 
    private DateTime yourDates 
    { 
     get 
     { 
      return (DateTime)Session["yourDates"]; 
     } 
     set 
     { 
      Session["yourDates"] = value; 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      //always clear the session at start 
      yourDates = new DateTime(); 
     } 

    } 

    protected void onSelectionChanged(object sender, EventArgs e) 
    { 
     DateTime selectedDate = (sender as Calendar).SelectedDate; 

     if (yourDate == selectedDate) 
     { 
      yourDate = new DateTime(); 
      //it is vital to clear the selection to trigger this method again 
      (sender as Calendar).SelectedDates.Clear(); 
     } 
     else 
     { 
      yourDate = selectedDate; 
      (sender as Calendar).SelectedDates.Clear(); 
     } 
    } 


    protected void onDayRender(object sender, DayRenderEventArgs e) 
    { 
     if (e.Day.Date == yourDate) 
     { 
      e.Cell.BackColor = System.Drawing.Color.Green; 
     } 
     else 
      e.Cell.BackColor = System.Drawing.Color.White; 
    } 

爲每個日曆單元調用onDayRender()方法。

+0

我想取消選擇所選日期 –

+0

我明白了,目前還不清楚爲什麼要這麼做。 您想從日曆中選中/取消選中日期嗎? 如果未選擇日期,您想要停止表單回發嗎? – fra9001

+0

這段代碼將在我的頁面中顯示12個月的日曆,假設如果一個月我想刪除日期,我可以做到這一點。 –

0

使用此代碼有助於解決問題:

Calendar1.SelectedDate = Convert.ToDateTime("01/01/0001"); 
+0

在我看來,這會改變選擇爲「01/01/0001」?我不確定這是OP在找什麼。 –

+0

我相信他們正在清理它。我認爲DateTimePicker只能回到1601? –

+0

在日曆上選擇日期時,此日期保持選定狀態,如果您在其他日期點擊,它將在日曆上選擇其他日期。當您將selectedDate設置爲「01/01/0001」時,您將刪除此選擇。它的工作方式與selectedDate的nullvalue類似。 –

相關問題