我想用DateTime填充一个listBox。首先,我用ASP编写代码。净
<table>
<tr>
<td>
<asp:ListBox
ID="ListBoxDate"
runat="server"
AutoPostBack="True"
OnSelectedIndexChanged="ListBoxDate_SelectedIndexChanged" >
</asp:ListBox>
</td>
</tr>
</table>
这是c#中的方法
protected void Page_Load(object sender, EventArgs e)
{
ListBoxDate.DataSource = GetAllDate(); /* it returns a list of objects Date (which is a class with an attribute DateTime) */
ListBoxDate.DataTextField = "_Date";
ListBoxDate.DataValueField = "_Date";
ListBoxDate.DataBind();
}
当我点击事件时ListBoxDate_SelectedIndexChanged方法:
protected void ListBoxDate_SelectedIndexChanged(object sender, EventArgs e)
{
Date date= new Date()
{
_Date = ListBoxDate.SelectedValue,
};
}
当我点击日期时,我只是恢复一个空字符串,而不是DateTime或包含日期的字符串。(列表框在我的浏览器上显示时是OK的)
我对其他字符串属性做了同样的原则,这是可以的。问题在于DateTime的使用。
那么,如何在点击列表框后恢复日期呢?
在Page_Load
中,您必须在绑定ListBox之前检查是否不是回发。否则,ListBox
会在输入ListBoxDate_SelectedIndexChanged
之前被重新填充,SelectedValue
的值会丢失:
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
ListBoxDate.DataSource = GetAllDate(); /* it returns a list of objects Date (which is a class with an attribute DateTime) */
ListBoxDate.DataTextField = "_Date";
ListBoxDate.DataValueField = "_Date";
ListBoxDate.DataBind();
}
}
请记住,SelectedValue
属性是一个String,您必须解析它的值以获得DateTime。可以使用DateTime.Parse()