先看实现效果吧!
这个问题,一听起来,感觉很容易,我当初也是这么认为的,但是在做的过程中,产生了很多的小问题,最后搞了一整天才搞定。很多人都说实现这个功能用ASP ajax控件CalendarExtender很容易,但是这个我搞了半天没搞出来。因而自己使用了下面的方法。
来看看步骤吧,
(1)首先自己新建一个sql server的数据库表(本例子是数据库DCM下的表ZDossier),其中有一个datatime类型的字段(本例子的是“上报时间”这个字段)并且自己在表中填一些记录。
(2)在页面上添加一个GridView,两个TextBox和两个ImageButton和一个Button以及两个Calendar控件,ID分别为:GridView1, txtCalendar1, txtCalendar2, IbtnCal1, IbtnCal2, Button1, Calendar1,Calendar2,并将两个Calendar控件设置为不可见。
(3)分别单击IbtnCal1,IbtnCal2获得Click时间,单击Calendar1, Calendar2获得SelectionChanged事件,其代码如下:
protected void IbtnCal1_Click(object sender, ImageClickEventArgs e)
{
this.Calendar1.Visible = true;
}
protected void IbtnCal12_Click(object sender, ImageClickEventArgs e)
{
this.Calendar2.Visible = true;
}
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
this.txtCalendar1.Text = this.Calendar1.SelectedDate.ToShortDateString();
this.Calendar1.Visible = false;
}
protected void Calendar2_SelectionChanged(object sender, EventArgs e)
{
this.txtCalendar2.Text = this.Calendar2.SelectedDate.ToShortDateString();
this.Calendar2.Visible = false;
}
(4)本篇的重点不再讲GridView的用法,因此GridView 的数据绑定设置就不再详述。getData()是从数据库中读入数据并绑定在GridView中,其代码如下:
public void getData()
{
SqlConnection cn = new SqlConnection("server=ZHOUWEN;database=DCM_data;user=DCM;password=DCM;");
cn.Open();
DateTime dt1 = Convert.ToDateTime(this.txtCalendar1.Text);
DateTime dt2 = Convert.ToDateTime(this.txtCalendar2.Text);
string str = "SELECT [ID],[案卷编号], [任务号], [问题类别], [大类], [小类], [当前所处阶段], [上报时间], [立案时间], [案情描述],[位置说明] FROM [ZDossier] WHERE [当前阶段编号]<5 ORDER BY [上报时间] DESC ";
SqlCommand cd = new SqlCommand(str, cn);
SqlDataAdapter da = new SqlDataAdapter(cd);
DataSet ds = new DataSet();
da.Fill(ds, "ZDossier");
DataTable DT1 = new DataTable();
DataTable DT2 = new DataTable();
//DT2获得表Tables["ZDossier"]的结构
DT2 = ds.Tables["ZDossier"].Clone();
DT1 = ds.Tables["ZDossier"];
int n = DT1.Rows.Count;
DateTime []DT=new DateTime[n];
for (int i = 0; i < n; i++)
{
DT[i] = Convert.ToDateTime(DT1.Rows[i]["上报时间"]);
if ((DT[i]>=dt1) && (DT[i]<=dt2))
{
DT2.Rows.Add(DT1.Rows[i].ItemArray);
}
}
this.GridView1.DataSource = DT2.DefaultView;
this.DataBind();
cn.Close();
}
(5)单击Button1,激发它的Click事件,用来调用getData,显示结果。
protected void Button1_Click(object sender, EventArgs e)
{
getData();
}
(6)调试,运行,分别点两个ImageButton来选择两个时间,然后点Button1,看一下效果。这样就实现了通过这两个时间来控制数据的读入。