这里我以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();
}
答案 0 :(得分:2)
DateTime
存储完整的值。您不能立即在DateTime
存储一年。您最好存储整个日期,然后将年份解析为string
或int
。适当地在后端进行修改或将其在前端投射到只有字符串或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"));