【发布时间】:2018-10-29 19:52:51
【问题描述】:
我试图让这个 datagridview 只显示用户通过 datetimepicker 选择的日期记录
这是我没有 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();
}
现在如果我尝试添加 where 语句,它会在调试模式下开始给我关于数据类型不匹配的错误,我怎样才能让它工作?
这是我用于 datetimepicker 的链接
OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT InvoiceNo, DayDate, Gross, Net, Staff FROM GrossSales Where DayDate = '"dateFrom.Value"'ORDER BY DayDate;", conn);
【问题讨论】:
-
您需要使用“+”号将 sql 字符串与日期时间值相连接。或者使用字符串插值。
-
看看你在做什么,你可能想考虑在你的数据的默认视图上设置一个行过滤器。这将防止您在每次有人更改日期时访问数据库。编辑:此外,一旦你解决了 Luis 表达的问题,Access 中的日期将被包裹在 # not '
-
你好@Luis & Charles。我试过了,没有得到错误,但也没有得到任何价值
标签: c# ms-access datagridview calculated-columns