广泛地说,我想用数据库中两个不同表中的数据填充数据网格视图。这很容易实现,但是其中一个表包含一些名为StartData,StopData和Day的字段。我真正想做的是用两个日期时间选择器设置的范围中包含StartDate和StopDate(或单个日期,即“ Day”)的数据填充该数据网格视图,一个用于Start Date,一个用于停止日期。
因此,我有一个包含两个表的数据库:城市和规划。 第一个表(城市)具有IdCity(城市的ID)和Name(城市的名称)。第二个具有IdPlan(某个计划的ID),IdCity(一个城市的ID),频率(偶尔,每年,每月),StartDate(如果是偶尔的话),StopDate(如果是偶尔的话),Day(如果是当话)是每年或每月)。
好的,我们现在对数据库很满意,让我们看一下表单包含的内容。有一个DataGridView,2x DateTimePicker(一个用于开始日期,一个用于停止日期)和一个按钮将触发事件。
当单击按钮时,DataGridView将填充以下列:名称(来自城市),开始日期,停止日期,频率。如果频率是每年或每月,则StartDate将与StopDate相同。
我已经编写了用来自两个不同表的数据填充数据网格视图的代码,这里是:
void populateDataGridView()
{
SqlConnection con = new SqlConnection();
con.ConnectionString = @"connectionString";
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT Cities.Name, Planning.StartDate, Planning.StopDate, Planning.Frequency, Planning.Day FROM Cities,Planning WHERE Cities.IdCity=Planning.IdCity";
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
dataGridView1.DataSource = dt;
cmd.Dispose();
con.Close();
}
我还编写了代码以仅选择定义的时间间隔中的日期。
void fitInInterval()
{
DateTime dateStart = Convert.ToDateTime(dateTimePicker1.Text);
DateTime dateStop = Convert.ToDateTime(dateTimePicker2.Text);
// the month
int startdm = Convert.ToInt32(startDate.Month); // startDateMonth
int dstartm = Convert.ToInt32(dateStart.Month);
int stopdm = Convert.ToInt32(stopDate.Month);
int dstopm = Convert.ToInt32(dateStop.Month);
// the days
int startdd = Convert.ToInt32(startDate.Day); // startDateDay
int dstartd = Convert.ToInt32(dateStart.Day);
int stopdd = Convert.ToInt32(stopDate.Day);
int dstopd = Convert.ToInt32(dateStop.Day);
if ((startdm == dstartm && startdd >= dstartd) && (stopdm == dstopm && stopdd <= dstopd))
{
// This one is in interval, so it will be written in data grid view
}
}
最后,我想找到一种方法,使之适合那些在定义的间隔内适合的特定数据。
P.S。如果频率是每年或每月,则我提到了“天”字段。在这种情况下,开始日期等于结束日期。如果在给定的月份中不存在所选的每月出勤日期,则该访问将不在该月份进行。例如:如果某个城市的每月出勤日为31,那么在只有30天的月份中将没有该城市的出游记录。
编辑:好的,我设法使用以下方法填充日期为该间隔的数据:
cmd.CommandText = "SELECT Cities.Name, Planning.StartDate, Planning.StopDate, Planning.Frequency FROM Cities,Planning WHERE Cities.IDCity=Planning.IDCity AND Planning.StartDate>='" + dateTimePicker1.Value.Date + "' AND Planning.StopDate<='" + dateTimePicker2.Value.Date + "'";
那么,现在,如果访问是每年一次还是每月一次,如何更改一天的格式?我的意思是,如果(例如)我拥有:某个城市的“计划日”(22),并且日期时间选择器的值分别为“ 19/05/2018”(开始日期)和“ 27/07/2018”(停止日期),数据网格视图将填充: -城市名称-22/05/2018-22/05/2018-每月 -城市名称-22/06/2018-22/06/2018-每月 -城市名称-22/07/2018-22/07/2018-每月