我在下拉列表中显示了一个月份列表。在选择特定月份时,我想在文本框中显示月份编号。
例如,如果我选择January
,我希望将其显示为01
,同样适用于其他人。
这是我写的示例代码:
string monthName = "january";
int i = DateTime.ParseExact(monthName, "MMMM", CultureInfo.CurrentCulture).Month;
答案 0 :(得分:13)
使用此代码将选定的月份名称转换为月份数
DateTime.ParseExact(monthName, "MMMM", CultureInfo.InvariantCulture).Month
需要填充字符串吗?
PadleftMonthNumberString.PadLeft(2, "0")
<强>参考强>
示例控制台应用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string mnthname = "january";
int i = DateTime.ParseExact(mnthname, "MMMM", System.Globalization.CultureInfo.InvariantCulture).Month;
Console.WriteLine(i.ToString());
Console.ReadLine();
}
}
}
答案 1 :(得分:3)
只是尝试即兴(?)关于hamlin11的答案,你可以通过使用下拉列表的selectedindex + 1
来绕过解析代码答案 2 :(得分:3)
这是一种替代方案,不需要任何解析或使用下拉列表的索引。
创建月份值到月份文本的列表,然后使用此列表创建字典以将文本映射到值。像这样:
var months =
from m in Enumerable.Range(1, 12)
select new
{
Value = m,
Text = (new DateTime(2011, m, 1)).ToString("MMMM"),
};
var list = months.Select(m => m.Text).ToArray();
var map = months.ToDictionary(m => m.Text, m => m.Value);
现在可以从list
填充下拉列表,并且可以使用map
将所选的任何值转换回该值。
var month = map["January"];
这会生成文本而不是解析文本,因此它适用于任何文化。
答案 3 :(得分:0)
使用下拉列表的索引是一个不错的选择。您还可以将字典绑定到下拉列表。创建包含当前文化的月份名称的字典:
var months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames.Select ((m, i) =>
new {
Key = string.Format("{0,2}", i + 1),
Value = m,
});
使用数据绑定:
ddl.DataSource = months;
ddl.DataTextField = "Value";
ddl.DataValueField = "Key";
ddl.DataBind();