C# 基于DateTimePicker值在Datagridview中显示结果

C# 基于DateTimePicker值在Datagridview中显示结果,c#,ms-access,datagridview,calculated-columns,C#,Ms Access,Datagridview,Calculated Columns,我试图让这个datagridview只显示用户通过datetimepicker选择的日期记录 private void frmSaleReport_Load(object sender, EventArgs e) { OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;User Id=;Password=;Data Source=TS-POS.accdb"); con

我试图让这个datagridview只显示用户通过datetimepicker选择的日期记录

    private void frmSaleReport_Load(object sender, EventArgs e)
{
    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;User Id=;Password=;Data Source=TS-POS.accdb");
    conn.Open();
    OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT InvoiceNo, DayDate, Gross, Net, Staff FROM GrossSales ORDER BY DayDate;", conn);
    DataSet ds = new DataSet();
    dataAdapter.Fill(ds);
    dataGridView2.DataSource = ds.Tables[0];
    dataGridView2.Columns["InvoiceNo"].HeaderText = "رقم الفاتورة";
    dataGridView2.Columns["InvoiceNo"].Width = 150;
    dataGridView2.Columns["DayDate"].HeaderText = " التاريخ";
    dataGridView2.Columns["DayDate"].Width = 350;
    dataGridView2.Columns["Gross"].HeaderText = "الإجمالي";
    dataGridView2.Columns["Gross"].Width = 150;
    dataGridView2.Columns["Net"].HeaderText = " الصافي";
    dataGridView2.Columns["Net"].Width = 150;
    dataGridView2.Columns["Staff"].HeaderText = " الموظف";
    dataGridView2.Columns["Staff"].Width = 150;
    conn.Close();
    GrandTotal();
    Qty();
}
private void Qty()
{
    int sum = 0;
    for (int i = 0; i < dataGridView2.Rows.Count; ++i)
    {
        sum += Convert.ToInt32(dataGridView2.Rows[i].Cells[0].Value);
    }
    textBox1.Text = sum.ToString();
}
private void GrandTotal()
{
    int sum2 = 0;
    for (int i = 0; i < dataGridView2.Rows.Count; ++i)
    {
        sum2 += Convert.ToInt32(dataGridView2.Rows[i].Cells[4].Value);
    }
    textBox3.Text = sum2.ToString();
}
    OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT InvoiceNo, DayDate, Gross, Net, Staff FROM GrossSales Where DayDate = '"dateFrom.Value"'ORDER BY DayDate;", conn);
这是我没有datetimepicker的原始代码

    private void frmSaleReport_Load(object sender, EventArgs e)
{
    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;User Id=;Password=;Data Source=TS-POS.accdb");
    conn.Open();
    OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT InvoiceNo, DayDate, Gross, Net, Staff FROM GrossSales ORDER BY DayDate;", conn);
    DataSet ds = new DataSet();
    dataAdapter.Fill(ds);
    dataGridView2.DataSource = ds.Tables[0];
    dataGridView2.Columns["InvoiceNo"].HeaderText = "رقم الفاتورة";
    dataGridView2.Columns["InvoiceNo"].Width = 150;
    dataGridView2.Columns["DayDate"].HeaderText = " التاريخ";
    dataGridView2.Columns["DayDate"].Width = 350;
    dataGridView2.Columns["Gross"].HeaderText = "الإجمالي";
    dataGridView2.Columns["Gross"].Width = 150;
    dataGridView2.Columns["Net"].HeaderText = " الصافي";
    dataGridView2.Columns["Net"].Width = 150;
    dataGridView2.Columns["Staff"].HeaderText = " الموظف";
    dataGridView2.Columns["Staff"].Width = 150;
    conn.Close();
    GrandTotal();
    Qty();
}
private void Qty()
{
    int sum = 0;
    for (int i = 0; i < dataGridView2.Rows.Count; ++i)
    {
        sum += Convert.ToInt32(dataGridView2.Rows[i].Cells[0].Value);
    }
    textBox1.Text = sum.ToString();
}
private void GrandTotal()
{
    int sum2 = 0;
    for (int i = 0; i < dataGridView2.Rows.Count; ++i)
    {
        sum2 += Convert.ToInt32(dataGridView2.Rows[i].Cells[4].Value);
    }
    textBox3.Text = sum2.ToString();
}
    OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT InvoiceNo, DayDate, Gross, Net, Staff FROM GrossSales Where DayDate = '"dateFrom.Value"'ORDER BY DayDate;", conn);

连接日期值表达式时需要正确的格式:

OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT InvoiceNo, DayDate, Gross, Net, Staff FROM GrossSales Where DayDate = #" + dateFrom.Value.ToString("yyyy'/'MM'/'dd") + "#;", conn);
编辑:要删除时间段,请执行以下操作:

OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT InvoiceNo, DayDate, Gross, Net, Staff FROM GrossSales Where Fix(DayDate) = #" + dateFrom.Value.ToString("yyyy'/'MM'/'dd") + "#;", conn);
或:


您需要在sql字符串中使用带日期时间值的+符号。或者使用字符串插值。看看你在做什么,你可能想在数据的默认视图上设置一个行过滤器。这将防止您在每次有人更改日期时访问数据库。编辑:此外,一旦您解决了Luis expressed的问题,Access中的日期将被包装为not'Hello@Luis&Charles。我试过了,没有得到错误,但也没有得到任何值。谢谢Gustav,我试过了,但它在查询表达式“DayDate=05/DD/YYYY”的日期中给了我这个错误语法错误。好吧,这是我的错误,我把MM放在小盒子里,但是现在仍然没有给出错误,但是没有返回任何记录那么DayDate可能包含一个时间部分。