0

每当我将下拉列表留空时,我都会收到此错误:

“字符串未被识别为有效的日期时间”

我的 .aspx 如下所示:

<asp:DropDownList ID="cboDay" runat="server" Width="55px" Height="32px" AppendDataBoundItems="true">
    <asp:ListItem></asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="cboMonth" runat="server" Width="80px" Height="30px" AppendDataBoundItems="true">
    <asp:ListItem></asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="cboYear" runat="server" Width="65px" Height="30px" AppendDataBoundItems="true">
    <asp:ListItem></asp:ListItem>
</asp:DropDownList>

后面的代码:

protected void btnSave_Click(object sender, EventArgs e)
{

            SqlConnection con = new SqlConnection("Data Source=GATE-PC\\SQLEXPRESS;Initial Catalog=dbProfile;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("qryINSERTprof", con);
            cmd.CommandType = System.Data.CommandType.Text;

            String str = cboDay.SelectedItem.Text + "/" + cboMonth.SelectedItem.Text + "/" + cboYear.SelectedItem.Text;
            lbltxtage.Text = str;
            DateTime dt = Convert.ToDateTime(str);

            string bdate = lbltxtage.Text;
            DateTime dts = DateTime.Parse(bdate);
            TimeSpan d = DateTime.Now.Subtract(dts);
            double years = d.TotalDays / 365;
            int months = (int)((years - (int)years) * 12);
            txtage.Text = ((int)years).ToString();

            Response.Write(dt.ToString("dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture));
            cmd.Parameters.AddWithValue("@Lname", txtlname.Text);
            cmd.Parameters.AddWithValue("@Mname", txtmname.Text);
            cmd.Parameters.AddWithValue("@Fname", txtfname.Text);
            cmd.Parameters.AddWithValue("@BirthDate", lbltxtage.Text);
            cmd.Parameters.AddWithValue("@age", txtage.Text);

    cmd.CommandType = System.Data.CommandType.StoredProcedure;
            con.Open();
            cmd.ExecuteNonQuery();

}

任何帮助,将不胜感激。提前致谢。

4

3 回答 3

3

每当我将下拉列表留空时,我都会收到此错误

然后不要将其留空,或更改代码以检测空输入。

有几种方法可以做到这一点,但例如你可以这样做:

protected void btnSave_Click(object sender, EventArgs e)
{       
    if (String.IsNullOrEmpty(cboDay.SelectedItem.Text)
        || String.IsNullOrEmpty(cboMonth.SelectedItem.Text)
        || String.IsNullOrEmpty(cboYear.SelectedItem.Text))
    {
        // TOOD: notify your UI that the values must be supplied
        return;
    }

    String str = cboDay.SelectedItem.Text + "/" + cboMonth.SelectedItem.Text + "/" + cboYear.SelectedItem.Text;
    DateTime dt = Convert.ToDateTime(str);

    // ...
}
于 2013-06-10T09:14:11.693 回答
0

当您为日月和年使用单独的下拉列表时,请尝试这个

string date=cboDay.selectedtext+"/"+cbomonth.selectedtext+"/"+cboYear.selectedtext;
convert.todatetime(date);

但在尝试此操作之前,请确保您的日期格式为 01,02,...29,30,月份格式为 01,02,..11,12 均为两位数格式。否则您会收到错误消息。

于 2013-06-10T10:35:59.937 回答
0

当字段留空时,是否应该使用可为空的日期时间?

DateTime? dt = null;
DateTime tmp;

if (DateTime.TryParse(
    String.Format("{0}/{1}/{2}", 
        cboDay.SelectedItem.Text
        , cboMonth.SelectedItem.Text
        , cboYear.SelectedItem.Text
    )
    , out tmp
))
{
    dt = tmp;
}
于 2013-06-10T09:23:02.070 回答