我遇到了选中Dropdownlist
项目的问题。
首先,我将项目添加到Dropdownlist
然后选择项目,但它总是抛出异常(堆栈为空)。
异常表示堆栈为空,但我在dropdownlist
添加了新项目。
为什么我不能选择?在调试中,我看到它在dropdownlist
我的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dateDataBind();
GetMemDetail();
}
}
private void GetMemDetail()
{
var result = (from c in db.Customers
where c.CustomerID == thisCustomerID
select c).FirstOrDefault();
//result.Birthday is '1990/5/10'
//ddl_y item can't be selected, but ddl_m and ddl_d can
ddl_y.Items.FindByValue(result.Birthday.Value.Year.ToString()).Selected = true;
ddl_m.Items.FindByValue(result.Birthday.Value.Month.ToString()).Selected = true;
ddl_d.Items.FindByValue(result.Birthday.Value.Day.ToString()).Selected = true;
}
private void dateDataBind()
{
for (int i = 1920; i < DateTime.Now.Year - 5; i++)
{
tempStr = i.ToString();
ddl_y.Items.Add(new ListItem(tempStr + "Y", tempStr));
}
for (int i = 1; i < 13; i++)
{
tempStr = i.ToString();
ddl_m.Items.Add(new ListItem(tempStr + "M", tempStr));
}
dateDayBind();
}
protected void dateDayBind()
{
ddl_d.Items.Clear();
int mcount = DateTime.DaysInMonth(Convert.ToInt32(ddl_y.SelectedValue), Convert.ToInt32(ddl_m.SelectedValue));
for (int i = 1; i < mcount + 1; i++)
{
tempStr = i.ToString();
ddl_d.Items.Add(new ListItem(tempStr, tempStr));
}
}
答案 0 :(得分:4)
“Stack Empty”错误是由我认为的Visual Studio设计时功能引起的。可能不相关。
错误消息说明了一切。下拉菜单已经选择了一个不同的项目(除了1990),你也试图选择1990。
在选择新项目之前尝试清除选择。您可能还想为其他下拉菜单执行此操作:
ddl_y.ClearSelection();
ddl_y.Items.FindByValue(result.Birthday.Value.Year.ToString()).).Selected = true;
答案 1 :(得分:1)
根据执行流程,当调用dateDayBind()方法时,年份和月份中没有选定的值下拉,因此我们应该仅在选择年份和月份时尝试填充日期部分。 GetMemDetail()应如下所示:
private void GetMemDetail()
{
var result = (from c in db.Customers
where c.CustomerID == thisCustomerID
select c).FirstOrDefault();
//result.Birthday is '1990/5/10'
//ddl_y item can't be selected, but ddl_m and ddl_d can
ddl_y.Items.FindByValue(result.Birthday.Value.Year.ToString()).Selected = true;
ddl_m.Items.FindByValue(result.Birthday.Value.Month.ToString()).Selected = true;
dateDayBind();
ddl_d.Items.FindByValue(result.Birthday.Value.Day.ToString()).Selected = true;
}
不要忘记在dateDataBind()方法中删除对dateDayBind()方法的调用。
希望这能解决您的问题。