gpt4 book ai didi

c# - 可以过滤日期但不能过滤日期时间?

转载 作者:行者123 更新时间:2023-11-30 22:30:01 24 4
gpt4 key购买 nike

我有一个应用程序可以使用日期时间选择器根据日期过滤数据 GridView 。我数据库中的“日期”列是日期时间数据类型,因此它将包含存储在其中的日期和时间,但有些数据只有日期。我的问题是我的 datetimepicker 过滤器只能过滤那些日期 = 12:00:00 AM 的数据。当我使用 datatimepicker 选择日期时,无法过滤那些包含时间以外的数据。我不知道出了什么问题。这是我的代码:

public trackInput()
{
InitializeComponent();
dataGridView1.Visible = false;
webBrowser1.Location = new Point(12, 141);
}

/*private void trackInput_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'trackingBMSDATADataSet.BRDATA' table. You can move, or remove it, as needed.
this.bRDATATableAdapter.Fill(this.trackingBMSDATADataSet.BRDATA);

}*/
private void trackBtn_Click(object sender, EventArgs e)
{

dataGridView1.Visible = true;
if (dataGridView1.Visible == true)
{
webBrowser1.Location = new Point(12, 397);
}
//DataTable dt = null;
string connoInput = textBox1.Text;
string conString = Properties.Settings.Default.BMSDATAConnectionString;
using (SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\TrackCon\TrackCon\BMSDATA.sdf;Persist Security Info = True;Password=Gdex123$"))
{

string Ids = "conno= '" + System.Text.RegularExpressions.Regex.Replace(textBox1.Text.Trim(), @"\s*\n\s*", "' OR conno= '") + "'";
SqlCeCommand com = new SqlCeCommand("SELECT conno,cmpsno,ctrx,dsysdate,cstnno,corigin FROM BRDATA WHERE " +Ids, con);
SqlCeDataAdapter adap = new SqlCeDataAdapter(com);
DataSet set = new DataSet();
adap.Fill(set);
if (set.Tables.Count > 0)
{
bRDATABindingSource1.DataSource = set.Tables[0];
}
bRDATABindingSource1.Filter = null;
dataGridView1.DataSource = bRDATABindingSource1;
con.Close();
}
}

private void trackMPSbtn_Click(object sender, EventArgs e)
{
dataGridView1.Visible = true;
if (dataGridView1.Visible == true)
{
webBrowser1.Location = new Point(12, 397);
}
//DataTable dt = null;
//string connoInput = textBox1.Text;
string conString = Properties.Settings.Default.BMSDATAConnectionString;
using (SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\TrackCon\TrackCon\BMSDATA.sdf;Persist Security Info = True;Password=Gdex123$"))
{
dataGridView1.DataSource = bRDATABindingSource1;
string Ids = "cmpsno= '" + System.Text.RegularExpressions.Regex.Replace(textBox2.Text.Trim(), @"\s*\n\s*", "' OR cmpsno= '") + "'";
con.Open();
SqlCeCommand com = new SqlCeCommand("SELECT conno,cmpsno,ctrx,dsysdate,cstnno,corigin FROM BRDATA WHERE " + Ids, con);
SqlCeDataAdapter adap = new SqlCeDataAdapter(com);
DataSet set = new DataSet();
adap.Fill(set);
if (set.Tables.Count > 0)
{
bRDATABindingSource1.DataSource = set.Tables[0];
}
bRDATABindingSource1.Filter = null;
dataGridView1.DataSource = bRDATABindingSource1;
con.Close();
}
}

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
bRDATABindingSource1.Filter = string.Format("dsysdate = #{0:d/M/yyyy HH:mm tt}#", dateTimePicker1.Value.ToLongDateString());
}

最佳答案

DateTimePicker 有一个包含所选日期的属性值。您应该使用此日期来形成如下所示的查询:

where somedate >= datetimepicker.Value.Date 
and somedate < datetimepicker.Value.Date.AddDays(1)

其中 .Date 仅返回 DateTime 的日期部分。要准备 where 子句,请将 SqlCeCommand 的 where 部分替换为

" where conno >= @startDate and conno < @endDate"

给SqlCeCommand添加两个参数

com.Parameters.Add (new SqlCeParameter("@startDate", SqlDbType.DateTime, 
textbox1.Value.Date));
com.Parameters.Add (new SqlCeParameter("@endDate", SqlDbType.DateTime,
textbox1.Value.Date.AddDays(1)));

并用 cmpsno 做类似的练习。

更新:我完全错过了最后一个方法。

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
bRDATABindingSource1.Filter = string.Format("dsysdate >= '{0:yyyy-MM-dd}' AND dsysdate < '{1:yyyy-MM-dd}'", dateTimePicker1.Value, dateTimePicker1.Value.AddDays(1));
}

尝试解释:

由于 dsysdate 有一个时间组件,您需要过滤从午夜开始到第二天午夜的时间间隔 - 这是 Value.AddDays(1)。不幸的是,我对过滤 BindingSource 了解不多,因为我主要在数据库级别进行过滤,因此是第一个代码。您可能希望重写 dateTimePicker1_ValueChanged 以从数据库中检索数据而不是在内存中进行过滤;由于索引而使用更大的表时,它会得到返回。

说到这一点,您可能会考虑以不同方式构建代码。此类任务通常通过检查过滤控件、构建查询并执行它的方法来完成,从而消除重复代码并使您能够同时按多个条件进行过滤。当过滤控件的内容发生变化时调用方法。

关于c# - 可以过滤日期但不能过滤日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9899823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com