根据下拉列表选择的日期值填充GridView

本文关键字:填充 GridView 日期 下拉列表 选择 | 更新日期: 2023-09-27 18:08:51

我正在编写asp.net c#代码,以便使用sql查询和下拉列表填充Gridview。场景如下:

  1. 如果下拉列表所选值为空,则选择所有来自数据库(select * from table)并填充GridView。这在visual studio 2008和服务器机器中都可以完美地工作。
  2. 如果下拉列表选择的值是一个日期(这个日期是从数据库中选择的,所以它应该匹配数据库中的一个列值),然后从表中选择*,其中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);
}

有谁能帮忙吗?

根据下拉列表选择的日期值填充GridView

您要么传递日期,要么传递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"。再次感谢。