字符串未被识别为有效的DateTime12

时间:2015-07-28 01:40:52

标签: c# asp.net gridview

这里我以2015年格式的下拉列表绑定日期(来自表格),并且当网格视图中的日期等于下拉列表中的选定值时,想要在网格视图中填充数据。错误说" String未被识别为有效的DateTime"。这一行出错

 cmd.Parameters.AddWithValue("@eventDate", DateTime.Parse(ddlLocation.SelectedValue));

这是下拉列表代码

 SqlCommand cmd = new SqlCommand("SELECT DATEPART(yyyy, eventDate) AS eventDate FROM events group by eventDate", con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);
        con.Close();
        ddlLocation.DataSource = dt;
        ddlLocation.DataTextField = "eventDate";
       ddlLocation.DataValueField = "eventDate";
        ddlLocation.DataBind();
        ddlLocation.Items.Insert(0, new ListItem("All", ""));

这是网格视图代码:

 SqlCommand cmd = new SqlCommand("select id, eventDate, eventName from events where eventDate = @eventDate", con);
     cmd.Parameters.AddWithValue("@eventDate", DateTime.Parse(ddlLocation.SelectedValue));
     SqlDataAdapter da = new SqlDataAdapter(cmd);
     da.Fill(dt);
     }
     else
     {
     SqlCommand cmd = new SqlCommand("select id, eventDate, eventName from events", con);
     SqlDataAdapter da = new SqlDataAdapter(cmd);
     da.Fill(dt);
     }
      con.Close();
     gvDetails.DataSource = dt;
     gvDetails.DataBind();
   }

3 个答案:

答案 0 :(得分:2)

DateTime存储完整的值。您不能立即在DateTime存储一年。您最好存储整个日期,然后将年份解析为stringint。适当地在后端进行修改或将其在前端投射到只有字符串或int。

围绕此问题的解决方案将在前端,我想从用户处获取以下内容, dtb 来自this question

var result = DateTime.Parse("05/11/2010").Year;
//result = 10

答案 1 :(得分:2)

虽然Adam回答了这个问题,但请允许我解释一下如何在代码中使用它:

正如亚当解释的那样 - 您的输入ddlLocation.SelectedValue格式不正确。您需要做的是首先将该值设置为完整日期。您可以尝试的是:

cmd.Parameters.AddWithValue("@eventDate", DateTime.Parse("1/1/" + ddlLocation.SelectedValue));

通过在您的值中添加"1/1/",这将使ddlLocation.SelectedValue = "1/1/2015"成为DateTime.Parse方法的有效输入。

稍后,当您需要访问此日期时,您可以使用Adam的

建议
var result = DateTime.Parse("1/1/2015").Year;
//result = 15

答案 2 :(得分:0)

您可以尝试以下内容:

string Text="22/11/2009";
DateTime date = DateTime.ParseExact(Text, "dd/MM/yyyy", null);              
Console.WriteLine("update date => "+date.ToString("yyyy-MM-dd"));