DataTable dt = new DataTable();
private void txtSearch_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{
DataView dv = dt.DefaultView;
dv.RowFilter = string.Format("Description LIKE '%{0}%' OR Manufacturer LIKE '%{0}%' OR ManufacturerItemNumber LIKE '%{0}%' OR ItemNumber LIKE '%{0}%'", txtSearch.Text);
dataGridView.DataSource = dv;
dataGridView.Update();
dataGridView.Refresh();
}
}
首先我连接到我的sql数据库,显示所有记录。然后我运行此代码。当我在文本框中输入内容时效果很好。但是我想通过添加额外的文本框来缩小过滤结果的范围。使用第二个文本框我想从第一个文本框中过滤我过滤的数据。
private void Descrip_txtbox_KeyDown(object sender, KeyEventArgs e)
{
DataView dv = dt.DefaultView;
dt = dv.ToTable();
if (e.KeyCode == Keys.Return)
{
dv.RowFilter = string.Format("Description LIKE '%{0}%' OR Manufacturer LIKE '%{0}%' OR ManufacturerItemNumber LIKE '%{0}%' OR ItemNumber LIKE '%{0}%'", Descrip_txtbox.Text);
dataGridView.DataSource = dv
}
我想从txtsearch文本框中获取第一次搜索的过滤数据,然后使用下一个文本框再过滤,依此类推。
有人可以帮帮我吗? 谢谢。
答案 0 :(得分:0)
假设您想要一个AND过滤器,它将如下所示:
DataView dv = ((DataView)dataGridView.DataSource);
var secondFilter = string.Format("Description LIKE '%{0}%' OR Manufacturer LIKE '%{0}%' OR ManufacturerItemNumber LIKE '%{0}%' OR ItemNumber LIKE '%{0}%'", Descrip_txtbox.Text);
if ( dv.RowFilter == null || dv.RowFilter.Length == 0 )
dv.RowFilter = secondFilter;
else
dv.RowFilter = "(" + dv.RowFilter & ") AND " + secondFilter;
dataGridView.DataSource = dv;
括号和AND是必需的,因为您希望进一步细化过滤器,否则添加OR可能会导致包含更多记录。
答案 1 :(得分:0)
正在发生的事情是您要将新value
分配给dv.RowFilter
,这将清除之前的过滤器。
您可以使用AND
连接新的过滤器,例如:
dv.RowFilter += " AND " + string.Format("Description LIKE '%{0}%' OR Manufacturer LIKE '%{0}%' OR ManufacturerItemNumber LIKE '%{0}%' OR ItemNumber LIKE '%{0}%'", Descrip_txtbox.Text);