根据下拉列表选择的日期值填充GridView
本文关键字:填充 GridView 日期 下拉列表 选择 | 更新日期: 2023-09-27 18:08:51
我正在编写asp.net c#代码,以便使用sql查询和下拉列表填充Gridview。场景如下:
- 如果下拉列表所选值为空,则选择所有来自数据库(select * from table)并填充GridView。这在visual studio 2008和服务器机器中都可以完美地工作。
- 如果下拉列表选择的值是一个日期(这个日期是从数据库中选择的,所以它应该匹配数据库中的一个列值),然后从表中选择*,其中date =下拉列表。选择的值。如果我使用Visual Studio 2008运行它,这个是有效的,但是给某个值一个空网格或一个错误,说
将char数据类型转换为日期时间数据类型导致日期时间值超出范围
//Page Load
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Condtion = "";
this.BindGrid(Condtion);
}
}
//Fill Grid View
private void BindGrid( String Condtion )
{
string strConnString = ConfigurationManager.ConnectionStrings["ICIRDATAConnectionString1"].ConnectionString;
using (SqlConnection con = new SqlConnection(strConnString))
{
String Qsql = "Select * from WeeklyReportView " + Condtion + "";
using (SqlCommand cmd = new SqlCommand(Qsql))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
}
}
}
//Drop down List Selected Index Changed
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
DateTime dt;
if(DropDownList1.SelectedValue!="1")
{
dt = DateTime.ParseExact(DropDownList1.SelectedValue, "dd/MM/yyyy hh:mm:ss", new CultureInfo("en-GB"));
Condtion1 = "wr_week='" + dt + "'";
}
Condtion2 = "eng_name='" + DropDownList2.SelectedValue + "'";
if (DropDownList1.SelectedValue != "1" && DropDownList2.SelectedValue != "1")
{
Condtion = "Where " + Condtion1 + " and " + Condtion2;
}
else if (DropDownList2.SelectedValue != "1" && DropDownList1.SelectedValue == "1")
{
Condtion = "Where " + Condtion2;
}
else if (DropDownList2.SelectedValue == "1" && DropDownList1.SelectedValue != "1")
{
Condtion = "Where " + Condtion1;
}
else
{
Condtion = "";
}
this.BindGrid(Condtion);
}
有谁能帮忙吗?
您要么传递日期,要么传递datetime的参数类型。你不能把一个dateime对象放到一个字符串中并把它发送给sql server。
改变这一行:
dt = DateTime.ParseExact(DropDownList1.SelectedValue, "dd/MM/yyyy hh:mm:ss", new CultureInfo("en-GB"));
Condtion1 = "wr_week='" + dt + "'";
:
dt = DateTime.ParseExact(DropDownList1.SelectedValue, "dd/MM/yyyy hh:mm:ss", new CultureInfo("en-GB"));
var datestring = dt.ToString("yyyy-MM-dd HH:mm:ss");
Condtion1 = "wr_week=convert(datetime, '"+ datestring +"', 121)";
try this query
select * from table where date='"+DropDownList1.SelectedItem.ToString()+"';
试试这个
dt = DateTime.Parse(DropDownList1.SelectedValue,System.Globalization.CultureInfo.InvariantCulture);
string ouputDate = dt.ToUniversalTime().ToString("dd/MM/yyyy hh:mm:ss",System.Globalization.CultureInfo.InvariantCulture);
Condtion1 = "wr_week='" + ouputDate + "'";
感谢大家的贡献,我已经找到了解决方案,实际上在我的机器上安装的SQL Server和服务器机器上安装的SQL Server之间存在不兼容,问题是我的SQL Server有"dd/MM/yyyy hh: MM:ss"作为日期格式,但是服务器机器SQL Server有"yyyy-MM-dd hh: MM:ss.mmm"。再次感谢。