日期:2014-05-18  浏览次数:21056 次

DataGridView过滤数据问题,高手赐教
小弟现在想对一个已经绑定数据的datagridview空间进行过滤操作,筛选出符合条件的结果,此种过滤操作并不是一次。也就是说。我想将所有数据一次性select出,然后对其符合条件的过滤。
打个比方。
select   *   from   users
--------------------------------
用户名   |   密码   |   备注
admin     |admin   |   无
admins   |admins|   无
ican       |ican     |   无
--------------------------------
过滤
第一次过滤
密码   =   'admins '
admins   admins   无
第二次过滤
密码   =   'admin '
admin   admin   无
.
.
.
.
.
请高手指点一些,最好有源代码!

------解决方案--------------------
你样做很烦呢,要真达到这种效果有很多种.比如在select的时候过滤,比如可以先放在sqldatareader中,然后再转换成DataTable,直接绑定,要是你先绑定的话,可以取出来,删除不要的,但要是你之后又想要了的话,那又得重新获取,不是更烦....建议方法如下:

/// <summary>
///
/// </summary>
/// <param name= "sqlDr "> 包含所有数据的数据源 </param>
/// <param name= "param "> 包含过滤字段的条件 </param>
/// <returns> 过滤后的数据源DataTable </returns>
private DataTable filterP(System.Data.SqlClient.SqlDataReader sqlDr,Hashtable param)
{
DataTable dt = new DataTable();
int l = fileterName.Length;
for (int i = 0; i < sqlDr.FieldCount;i++ )
{
DataColumn dc = new DataColumn();
dc.ColumnName = sqlDr.GetName(i);
dc.DataType = sqlDr.GetFieldType(i);
dt.Columns.Add(dc);
}
while(sqlDr.Read())
{
DataRow dr = dt.NewRow();
int temp = 0;
for (int j = 0; j < dt.Columns.Count;j++ )
{
temp = 0;
dr[j] = sqlDr[j].ToString();
for (int k = 0; k < param.Count;k++ )
{
if(param[k].ToString()=sqlDr[j].ToString())
{
temp++;
}
}
}
if(temp==0){
dt.Rows.Add(dr);
}
dr = null;
}
sqlDr.Close();
return dt;
}
/// <summary>
/// 设置过滤参数
/// </summary>
/// <param name= "key "> </param>
/// <param name= "value "> </param>
/// <returns> </returns>
private Hashtable setParam(string[] key,string[] value)
{
Hashtable h = new Hashtable();
if(key.Length==value.Length)
{
for (int i = 0; i < key.Length;i++ )
{
h.Add(key[i], value[i]);
}
}
return h;
}
------解决方案--------------------
DataTable dt = DB.GetTable( "select * from users ");
DataRow[] rows1 = dt.Select( "密码= 'Admins ' ");
DataRow[] rows2 = dt.Select( "密码= 'Admin ' ");
------解决方案--------------------

1、所有数据一次性select出 放在 DataSet 变量 a_ds 中
2、定义过滤条件

DataView rowfilter = new DataView(a_ds.Tables[0]);
rowfilter.RowFilter = "密码= 'Admins ' ";
rowfilter.RowStateFilter = DataViewRowState.OriginalRows;

3、将过滤好的数据放在一个 新的 DataTable 中

DataTable dt = rowfilter.ToTable();