我需要創建一個ASP.NET頁面,該頁面顯示一個日曆控件,該控件根據下拉列表中選定的值顯示特定的日曆。 目前我需要顯示HebrewCalendar和regualr(格里高利)日曆,但將來我可能需要其他人。 當然,我無法使用Windows的區域設置或web.config中的全球化定義,因爲所需的日曆是在運行時設置的。 如何在日曆控件中顯示各種日曆?ASP.NET日曆控件中的各種日曆
謝謝!
我需要創建一個ASP.NET頁面,該頁面顯示一個日曆控件,該控件根據下拉列表中選定的值顯示特定的日曆。 目前我需要顯示HebrewCalendar和regualr(格里高利)日曆,但將來我可能需要其他人。 當然,我無法使用Windows的區域設置或web.config中的全球化定義,因爲所需的日曆是在運行時設置的。 如何在日曆控件中顯示各種日曆?ASP.NET日曆控件中的各種日曆
謝謝!
訣竅是你需要設置當前線程的文化,並且(對於希伯來語等一些語言環境)也需要在該文化中設置日曆。
下面的自包含代碼示例說明了如何執行此操作。這種方法當然可能會影響其他控件的本地化文本。如果這是一個問題 - 並且您只想本地化日曆控件並將剩餘的英文留言 - 則可以執行以下操作:
下面的代碼:
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Globalization"%>
<%@ Import Namespace="System.Threading"%>
<%@ Import Namespace="System.Collections.Generic"%>
<html>
<body>
<form id="form1" runat="server">
Choose a language and calendar: <asp:DropDownList ID="LocaleChoice" runat="server" AutoPostBack="true">
<asp:ListItem Value="en-US" Selected="True">English</asp:ListItem>
<asp:ListItem Value="es-MX">Español</asp:ListItem>
<asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
<asp:ListItem Value="he-IL|HebrewCalendar">Hebrew (Hebrew Calendar)</asp:ListItem>
<asp:ListItem Value="he-IL|GregorianCalendar">Hebrew (Gregorian Calendar)</asp:ListItem>
<asp:ListItem Value="ar-SA|HijriCalendar">Arabic (Hijri Calendar)</asp:ListItem>
<asp:ListItem Value="ar-SA|GregorianCalendar">Arabic (Gregorian Calendar)</asp:ListItem>
</asp:DropDownList><br /><br />
<asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
</form>
</body>
</html>
<script runat="server">
Dictionary<string, System.Globalization.Calendar> Calendars =
new Dictionary<string, System.Globalization.Calendar>()
{
{"GregorianCalendar", new GregorianCalendar()},
{"HebrewCalendar", new HebrewCalendar()},
{"HijriCalendar", new HijriCalendar()},
{"JapaneseCalendar", new JapaneseCalendar()},
{"JulianCalendar", new JulianCalendar()},
{"KoreanCalendar", new KoreanCalendar()},
{"TaiwanCalendar", new TaiwanCalendar()},
{"ThaiBuddhistCalendar", new ThaiBuddhistCalendar()}
};
protected override void InitializeCulture()
{
if (Request.Form["LocaleChoice"] != null)
{
string selected = Request.Form["LocaleChoice"];
string[] calendarSetting = selected.Split('|');
string selectedLanguage = calendarSetting[0];
CultureInfo culture = CultureInfo.CreateSpecificCulture(selectedLanguage);
if (calendarSetting.Length > 1)
{
string selectedCalendar = calendarSetting[1];
var cal = culture.Calendar;
if (Calendars.TryGetValue(selectedCalendar, out cal))
culture.DateTimeFormat.Calendar = cal;
}
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
base.InitializeCulture();
}
protected void Page_Load(object sender, EventArgs e)
{
}
</script>
如果你需要每個日曆文化的定製看看BaseCalendar(有一個演示包括一個處理這種情況下)。改變當前線程的文化可能會在其他地方產生副作用。 BaseCalendar允許您爲日曆指定文化,而無需更改當前線程的文化。
+1:這篇文章值得! – 2010-07-02 14:48:13