数据库数据筛选方案
一 如果只进行单一的筛选,比如只对日期进行筛选,显示一定时期内的数据等等。这样可以直接用数据库语句经行筛选
例子:
string sqlstr=string.fomat("select * from table1 where date between {0} and {1}",datetimepiker1.value.toshortdatestring(),datetimepiker2.value.toshortdatestring());
二、如果经行多项条件筛选,比如有日期,有打折或正价,等等,这样的话最好把数据复制到一个新的表中,然后利用DATASET的属性来进行显示,当然也可以利用数据库中表的特有属性来经行判断(两个自己选一个)。
private void Filter(bool isSpeed) { // DataView dv = new DataView(ds.Tables [0]); DataTable dt=ds .Tables[0];//提取数据 if (isSpeed == true) { // dv.RowFilter = "aveSpeed='false'"; dt.Columns.Remove("aveSpeed"); //dt.Rows["aveSpeed"].ToString () = 60; DataRow[] drArr = dt.Select("AveSpeed>'60'");//筛选数据 // DataRow[] drArr= dt.Select("'++'<datatime"); //筛选显示 DataTable dtNew = dt.Clone(); for (int i = 0; i < drArr.Length; i++) { dtNew.ImportRow(drArr [i]); } this.dgvRoadReport .DataSource =dtNew ; } else { //dv.RowFilter = "aveSpeed='true'"; } }
利用数据库属性的话(DATAVIEW 自己百度吧):
private void Filter(Boolean isDiscount) { DataView dv = new DataView(ds.Tables[0]); if (isDiscount == true) { dv.RowFilter = "是否特价='false'"; } else { dv.RowFilter = "是否特价='true'"; } // 重新绑定数据源 this.dgvCommodity.DataSource = dv; }