更改gridview中下拉列表的日期格式

rqmkfv5c  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(239)

我在asp gridview中有一个下拉列表,可以根据选定的日期进行筛选。但当我在下拉列表中进行选择时,我得到一个错误mysql.data.mysqlclient.mysqlexception:不正确的日期值:第1行的“datevalue”列的“9/12/2018 12:00:00 am”。
下面是客户端代码:

<asp:GridView ID="gdvTM" runat="server" AutoGenerateColumns="False" ShowHeaderWhenEmpty="true" AllowPaging="true" OnPageIndexChanging="gdvTM_PageIndexChanging" DataKeyNames="ID" PageSize="10" CssClass="cssgridview" AlternatingRowStyle-BackColor="#d5d8dc" >
 <Columns >
 <asp:TemplateField>
 <HeaderTemplate>
  Date:
  <asp:Label ID="lbldate" Text="date" Visible="false" runat="server"></asp:Label>
  <asp:DropDownList ID="ddlgvdate" DataTextFormatString="{0:yyyy-MM-dd}" runat="server" OnSelectedIndexChanged="DropDownChange" AutoPostBack="true" AppendDataBoundItems="true">
  </asp:DropDownList>
  </HeaderTemplate>
  <ItemTemplate >
  <asp:Label ID="lbldate1" runat="server" Text='<%# Eval("date", "{0:yyyy-MM-dd}") %>'></asp:Label>
  </ItemTemplate>
  </Columns>
</asp:GridView>

下面是服务器端代码:

protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostBack)
   {
       BindGrid();
   }
}
private void BindDropDownList()
{
     PopulateDropDown((cells.FindControl("ddlgvdate") as DropDownList), (cells.FindControl("lbldate") as Label).Text);
}
private void PopulateDropDown(DropDownList ddl, string columnName)
    {
        ddl.DataSource = BindDropDown(columnName);
        ddl.DataTextField = columnName;
        ddl.DataValueField = columnName;
        ddl.DataBind();
        ddl.Items.Insert(0, new ListItem("Please Select", "0"));
    }
private void BindGrid()
    {
        DataTable dt = new DataTable();
        String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
        MySqlConnection con = new MySqlConnection(strConnString);
        MySqlDataAdapter sda = new MySqlDataAdapter();
        MySqlCommand cmd = new MySqlCommand("GetApprovedData1");
        cmd.CommandType = CommandType.StoredProcedure;
        string date = null;
        DateTime dateValue1 = Convert.ToDateTime(date);
        string dateValue = dateValue1.ToString("yyyy-MM-dd");
        dateValue = null;
        if (ViewState["Date"] != null && ViewState["Date"].ToString() != "0")
        {
            dateValue = ViewState["Date"].ToString();
        }
        cmd.Parameters.AddWithValue("dateValue", dateValue);
        cmd.Connection = con;
        sda.SelectCommand = cmd; 
        sda.Fill(dt);
        gdvTM.DataSource = dt;
        int i = dt.Rows.Count;
        gdvTM.DataBind();
        this.BindDropDownList();
        TableCell cell = gdvTM.HeaderRow.Cells[0];
        setDropdownselectedItem(ViewState["Date"] != null ? (string)ViewState["Date"] : string.Empty, cell.FindControl("ddlgvdate") as DropDownList);
    }
 private void setDropdownselectedItem(string selectedvalue, DropDownList ddl)
    {
        if (!string.IsNullOrEmpty(selectedvalue))
        {
            ddl.Items.FindByValue(selectedvalue).Selected = true;
        }
    }
protected void DropDownChange(object sender, EventArgs e)
    {
        DropDownList dropdown = (DropDownList)sender;
        string selectedValue = dropdown.SelectedItem.Value;
        switch (dropdown.ID.ToLower())
        {
                case "ddlgvdate":
                ViewState["Date"] = selectedValue;
                break;
        }
        this.BindGrid();
    }
 private DataTable BindDropDown(string columnName)
    {
        String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
        MySqlConnection con = new MySqlConnection(strConnString);
        MySqlCommand cmd = new MySqlCommand("SELECT DISTINCT (" + columnName + ") FROM approved WHERE " + columnName + " IS NOT NULL", con);
        MySqlDataAdapter sda = new MySqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        return dt;
    }

下面是mysql存储过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `GetApprovedData1`
(in dateValue     date)
BEGIN
SELECT *
   FROM approved
   WHERE 
   (dateValue IS NULL OR date = dateValue);
END

请让我知道如何用正确的格式传递日期。提前谢谢。

uyto3xhc

uyto3xhc1#

感谢john的建议,我使用如下所示的空datetime来解决这个问题

private void BindGrid()
{
    DataTable dt = new DataTable();
    String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
    MySqlConnection con = new MySqlConnection(strConnString);
    MySqlDataAdapter sda = new MySqlDataAdapter();
    MySqlCommand cmd = new MySqlCommand("GetApprovedData1");
    cmd.CommandType = CommandType.StoredProcedure;
    DateTime? dateValue = null;
    if (ViewState["Date"] != null && ViewState["Date"].ToString() != "0")
    {
        dateValue = DateTime.Parse(ViewState["Date"].ToString());
    }
    cmd.Parameters.AddWithValue("dateValue", dateValue);
    cmd.Connection = con;
    sda.SelectCommand = cmd; 
    sda.Fill(dt);
    gdvTM.DataSource = dt;
    int i = dt.Rows.Count;
    gdvTM.DataBind();
    this.BindDropDownList();
    TableCell cell = gdvTM.HeaderRow.Cells[0];
    setDropdownselectedItem(ViewState["Date"] != null ? (string)ViewState["Date"] : string.Empty, cell.FindControl("ddlgvdate") as DropDownList);
}

相关问题