尝试将字符串转换为日期时间

时间:2012-10-30 16:06:14

标签: c# asp.net datetime calendarextender

如果请求的日期已经退出,我试图限制用户输入新记录。我试图做一个计数,以查看记录所放置的表是否已经具有该日期1或者不是0.我有一个日历扩展器附加到具有日期的文本框。

我一直得到:

字符串未被识别为有效的DateTime。

无法将“System.Web.UI.WebControls.TextBox”类型的对象强制转换为“System.IConvertible”。

取决于我尝试过的不同事物。

这是我的代码。

 TextBox startd = (TextBox)(DetailsView1.FindControl("TextBox5"));
                TextBox endd = (TextBox)(DetailsView1.FindControl("TextBox7"));
                DropDownList lvtype = (DropDownList)(DetailsView1.FindControl("DropDownList6"));

                DateTime scheduledDate = DateTime.ParseExact(startd.Text, "dd/MM/yyyy", null);
                DateTime endDate = DateTime.ParseExact(endd.Text, "dd/MM/yyyy", null);

                DateTime newstartDate = Convert.ToDateTime(startd.Text);
                DateTime newendDate = Convert.ToDateTime(endd.Text);

                //foreach (DataRow row in sd.Tables[0].Rows)
                DateTime dt = newstartDate;

                while (dt <= newendDate)
                {
                    //for retreiving from table
                    Decimal sd = SelectCountDate(dt, lvtype.SelectedValue, countDate);

                    String ndt = Convert.ToDateTime(dt).ToShortDateString();

                    // //start = string.CompareOrdinal(scheduledDate, ndt);
                    // // end = string.CompareOrdinal(endDate, ndt);

                    //trying to make say when leavetpe is greater than count 1 then throw error. 
                    if (sd > 0)
                    {
                        Response.Write("<script>alert('Date Already Requested');</script>");
                    }
                    dt.AddDays(1);

                }

^^^ 此版本抛出:“字符串未被识别为有效日期类型”错误

但是如果我用以下任何一个替换字符串:

  /*-----------------------Original------------------------------------
                string scheduledDate = Convert.ToDateTime(endd).ToShortDateString();
                string endDate = Convert.ToDateTime(endd).ToShortDateString();
                -------------------------------------------------------------------*/

                /*----------10-30---------------------------------------
                DateTime scheduledDate = DateTime.Parse(startd.Text);
                DateTime endDate = DateTime.Parse(endd.Text);
                ------------------------------------------------------*/

我得到“无法将类型为'System.Web.UI.WebControls.TextBox'的对象强制转换为'System.IConvertible'。”错误。

我只是想阻止用户输入已经退出的记录日期。

                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox5" runat="server" Height="19px"
                        Text='<%# Bind("lstdate",  "{0:MM/dd/yyyy}") %>' Width="67px"></asp:TextBox>
                    <asp:CalendarExtender ID="TextBox5_CalendarExtender" runat="server" Enabled="True"
                        TargetControlID="TextBox5">
                    </asp:CalendarExtender>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
                        ControlToValidate="TextBox5" ErrorMessage="*Leave Date Required" 
                        ForeColor="Red"></asp:RequiredFieldValidator>
                    <br />
                    <asp:CompareValidator ID="CompareValidator18" runat="server" 
                        ControlToCompare="TextBox7" ControlToValidate="TextBox5" 
                        ErrorMessage="Leave date cannot be after start date" ForeColor="Red" 
                        Operator="LessThanEqual" ToolTip="Must choose start date before end date"></asp:CompareValidator>
                </InsertItemTemplate>

3 个答案:

答案 0 :(得分:1)

检查(!string.IsNullOrEmpty(startd.Text))

via:tranceporter

答案 1 :(得分:0)

当您尝试解析文本框本身而不是textbox.Text时,会出现"Unable to cast object of type 'System.Web.UI.WebControls.TextBox' to type 'System.IConvertible'"

这段代码到底是什么时候执行的?如果在加载页面时执行它,则文本框将为空,因此您尝试解析空字符串,这显然是正确的格式。

答案 2 :(得分:0)

由于似乎startd.Text为空,因此如果文本不为空或为空,则只应执行DateTime.ParseExact。您可以使用:

if(!string.IsNullOrEmpty(startd.Text))
{
    // do stuff
}