如何使用 DateTime.DaysInMonth 将一个月中的天数填充到组合框
How do I fill a Combobox with days in month using an DateTime.DaysInMonth
我正在尝试用这个
用所选月份的天数填充组合框
private void cboSelectMonth_SelectedIndexChanged(object sender, EventArgs e)
{
if (cboSelectMonth.SelectedIndex >= 0)
{
int year = Convert.ToInt32(cboSelectYear.SelectedValue);
int month = Convert.ToInt32(cboSelectMonth.SelectedValue);
this.cboSelectDay.DisplayMember = "Text";
this.cboSelectDay.ValueMember = "Value";
int dayCount = DateTime.DaysInMonth(year, month);
var days = new[ dayCount+1 ] { };
for (int i = 1; i < dayCount +1; i++)
{
days[i] = new { Text = Convert.ToString(i), Value = i };
//cboSelectDay.Items.Add(i);
// days[] { new { Text = Convert.ToString(i), Value = i } };
}
this.cboSelectDay.DataSource = days;
DateTime now = DateTime.Now;
int dayValue = now.Day;
cboSelectDay.SelectedIndex = dayValue - 1;
}
}
因此,我试图以一个列出当月所有日期的 ComboBox 结束。例如,选择 9 月将使 ComboBox 增加 30 天,而选择 10 月将为您增加 31 天,依此类推。我收到两个错误。第一个在 var days = new[ dayCount+1 ] { };
行上,表示 ']'
是预期的。第二个错误出现在 days[i] = new { Text = Convert.ToString(i), Value = i };
行上,上面写着 Cannot implicitly convert type 'AnonymousType#1' to 'int'
我正在尝试做一些类似于我在月中所做的事情,它确实有效(下面的代码块)。我做错了什么?
private void FillMonthCombobox()
{
this.cboSelectMonth.DisplayMember = "Text";
this.cboSelectMonth.ValueMember = "Value";
var months = new[]
{
new { Text = "January", Value = 1 },
new { Text = "February", Value = 2 },
new { Text = "March", Value = 3 },
new { Text = "April", Value = 4 },
new { Text = "May", Value = 5 },
new { Text = "June", Value = 6 },
new { Text = "July", Value = 7 },
new { Text = "Aughust", Value = 8 },
new { Text = "September", Value = 9 },
new { Text = "October", Value = 10 },
new { Text = "November", Value = 11 },
new { Text = "December", Value = 12 }
};
this.cboSelectMonth.DataSource = months;
DateTime now = DateTime.Now;
int monthValue = now.Month;
cboSelectMonth.SelectedIndex = monthValue - 1;
}
编辑: 我现在可以填充 ComboBox,但如何将 Text = day 和 Value = day 添加到循环中以便稍后引用该值?在这个循环的情况下,它们将是相同的,但在我正在使用的其他一些循环的情况下,它们将是不同的。本质上,我想在第二个代码块中做同样的事情,但有一个循环。
很简单,但你也必须指定年份。注意二月和闰年!
int year = 2015;
int month = 5;
int[] days = Enumerable.Range(1, DateTime.DaysInMonth(year, month)).ToArray();
之后可以指定为DataSource
:
cboSelectDay.DataSource = days;
cboSelectDay.DataBind();
使用您的一般方法,这确实有效:
int thisMonthsDays = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
for (int i = 1; i <= thisMonthsDays; i++) { comboBox1.Items.Add(i); }
它用预期的 31 天(5 月)填充 comboBox1。
努力完成并更好地掌握它,我认为这次更新会有所帮助:
先来个小的class:
public class YearClass
{
public int IndexOfMonth { get; set; }
public string DayName { get; set; }
}
现在添加将月份的日期绑定到组合框的代码:
List<YearClass> months = new List<YearClass>();
int thisMonthsDays = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
for (int i = 1; i <= thisMonthsDays; i++)
{
YearClass currentDay = new YearClass();
currentDay.IndexOfMonth = i;
DateTime dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, i);
currentDay.DayName = dt.DayOfWeek.ToString();
months.Add(currentDay);
}
comboBox1.DataSource = months;
comboBox1.DisplayMember = "DayName";
输出结果如下:
你可以这样做 - 我正在传递年月的硬编码值
for (int i = 0; i < DateTime.DaysInMonth(2015, 05); i++)
{
cmbMonth.Items.Add(i.ToString());
}
如果您有任何其他要求,请告诉我
我正在尝试用这个
用所选月份的天数填充组合框 private void cboSelectMonth_SelectedIndexChanged(object sender, EventArgs e)
{
if (cboSelectMonth.SelectedIndex >= 0)
{
int year = Convert.ToInt32(cboSelectYear.SelectedValue);
int month = Convert.ToInt32(cboSelectMonth.SelectedValue);
this.cboSelectDay.DisplayMember = "Text";
this.cboSelectDay.ValueMember = "Value";
int dayCount = DateTime.DaysInMonth(year, month);
var days = new[ dayCount+1 ] { };
for (int i = 1; i < dayCount +1; i++)
{
days[i] = new { Text = Convert.ToString(i), Value = i };
//cboSelectDay.Items.Add(i);
// days[] { new { Text = Convert.ToString(i), Value = i } };
}
this.cboSelectDay.DataSource = days;
DateTime now = DateTime.Now;
int dayValue = now.Day;
cboSelectDay.SelectedIndex = dayValue - 1;
}
}
因此,我试图以一个列出当月所有日期的 ComboBox 结束。例如,选择 9 月将使 ComboBox 增加 30 天,而选择 10 月将为您增加 31 天,依此类推。我收到两个错误。第一个在 var days = new[ dayCount+1 ] { };
行上,表示 ']'
是预期的。第二个错误出现在 days[i] = new { Text = Convert.ToString(i), Value = i };
行上,上面写着 Cannot implicitly convert type 'AnonymousType#1' to 'int'
我正在尝试做一些类似于我在月中所做的事情,它确实有效(下面的代码块)。我做错了什么?
private void FillMonthCombobox()
{
this.cboSelectMonth.DisplayMember = "Text";
this.cboSelectMonth.ValueMember = "Value";
var months = new[]
{
new { Text = "January", Value = 1 },
new { Text = "February", Value = 2 },
new { Text = "March", Value = 3 },
new { Text = "April", Value = 4 },
new { Text = "May", Value = 5 },
new { Text = "June", Value = 6 },
new { Text = "July", Value = 7 },
new { Text = "Aughust", Value = 8 },
new { Text = "September", Value = 9 },
new { Text = "October", Value = 10 },
new { Text = "November", Value = 11 },
new { Text = "December", Value = 12 }
};
this.cboSelectMonth.DataSource = months;
DateTime now = DateTime.Now;
int monthValue = now.Month;
cboSelectMonth.SelectedIndex = monthValue - 1;
}
编辑: 我现在可以填充 ComboBox,但如何将 Text = day 和 Value = day 添加到循环中以便稍后引用该值?在这个循环的情况下,它们将是相同的,但在我正在使用的其他一些循环的情况下,它们将是不同的。本质上,我想在第二个代码块中做同样的事情,但有一个循环。
很简单,但你也必须指定年份。注意二月和闰年!
int year = 2015;
int month = 5;
int[] days = Enumerable.Range(1, DateTime.DaysInMonth(year, month)).ToArray();
之后可以指定为DataSource
:
cboSelectDay.DataSource = days;
cboSelectDay.DataBind();
使用您的一般方法,这确实有效:
int thisMonthsDays = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
for (int i = 1; i <= thisMonthsDays; i++) { comboBox1.Items.Add(i); }
它用预期的 31 天(5 月)填充 comboBox1。
努力完成并更好地掌握它,我认为这次更新会有所帮助:
先来个小的class:
public class YearClass
{
public int IndexOfMonth { get; set; }
public string DayName { get; set; }
}
现在添加将月份的日期绑定到组合框的代码:
List<YearClass> months = new List<YearClass>();
int thisMonthsDays = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
for (int i = 1; i <= thisMonthsDays; i++)
{
YearClass currentDay = new YearClass();
currentDay.IndexOfMonth = i;
DateTime dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, i);
currentDay.DayName = dt.DayOfWeek.ToString();
months.Add(currentDay);
}
comboBox1.DataSource = months;
comboBox1.DisplayMember = "DayName";
输出结果如下:
你可以这样做 - 我正在传递年月的硬编码值
for (int i = 0; i < DateTime.DaysInMonth(2015, 05); i++)
{
cmbMonth.Items.Add(i.ToString());
}
如果您有任何其他要求,请告诉我