0

ドロップダウン リストを空白のままにしておくと、次のエラーが発生します。

「文字列は有効な DateTime として認識されませんでした」

私の .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

フィールドが空白のままの場合、null 許容の日時を使用する必要がありますか?

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 に答える