过滤器的datagridview使用数据视图
问题描述:
我使用的datagridview绑定到数据表中显示我的记录,我有这样的(只是举例)记录
名称国家市
过滤器的datagridview使用数据视图
JAck Country1 City1
Name2 Country1 City2
JACK Country2 City1
多个关键字
我有文本框搜索我不想使用这个文本框在这个datagridview中搜索多个关键字 我想例如得到Country1的所有记录,并有名字插孔 我把一个字符串文本框这样
[JACK国家1]
我创建这个方法基于任何列
string query = "";
Boolean firsttime = true;
bool firstkeyword = true;
foreach (string se in txt_ar_recherche.Text.Trim().Split(' '))
{
string search = (Convert.ToString(" like '%") + se) + "%'";
if(!firstkeyword) query += " and ";
query += "(";
bool firstcolumn = true;
foreach (DataGridViewColumn col in grid.Columns)
{
if (col.Visible)
{
if (firsttime)
{
query += "Convert(" + col.Name + ",'System.String')" + search;
firsttime = false;
}
else
{
query += " or " + "Convert(" + col.Name + ",'System.String')" + search;
}
}
firstcolumn = false;
}
firstkeyword = false;
query += ")";
}
(grid.DataSource as DataTable).DefaultView.RowFilter = query;
创建动态的RowFilter查询,但它不工作,我不知道如何解决这个问题在datagridview的 我wan't创建的部份相同的文本框搜索该数据表使用JavaScript mutilple关键字搜索,这是一个演示https://datatables.net/
答
试试这个全样本:
using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
DataGridView dataGridView;
DataTable dataTable;
DataView dataView;
TextBox textBoxSearch;
public Form1()
{
//InitializeComponent();
Width = 800;
dataGridView = new DataGridView { Parent = this, Dock = DockStyle.Top };
textBoxSearch = new TextBox { Parent = this, Top = 200 };
textBoxSearch.TextChanged += TextBoxSearch_TextChanged;
dataTable = new DataTable();
dataTable.Columns.Add("Name");
dataTable.Columns.Add("Country");
dataTable.Columns.Add("City");
dataTable.Rows.Add("JAck", "Country1", "City1");
dataTable.Rows.Add("Name2", "Country1", "City2");
dataTable.Rows.Add("JACK", "Country2", "City1");
dataView = new DataView(dataTable);
dataGridView.DataSource = dataView;
}
private void TextBoxSearch_TextChanged(object sender, EventArgs e)
{
var words = textBoxSearch.Text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (!words.Any())
{
dataGridView.DataSource = dataView;
return;
}
var dv = dataView;
foreach (var word in words)
{
var values = dataTable.Columns
.OfType<DataColumn>()
.Select(c => "Convert([" + c.ColumnName + "], System.String)")
.Select(c => c + " like '%" + word + "%'");
var filter = string.Join(" or ", values);
dv = new DataView(dv.ToTable());
dv.RowFilter = filter;
dataGridView.DataSource = dv;
}
}
}
}
+0
非常感谢你 –
如何生成查询看起来像?什么不行?崩溃的应用程序?在某些列上进行错误的过滤? – Reniuz
做了一些测试,如果你看看你的查询..你会发现一个不相关的'或'可能会导致问题 – Reniuz
但没有或查询这样的loke(名称像'%JACK%'或国家像'%JACK%'或像'%JACK%'这样的城市)和(像'%country1%'这样的名字或像'%country1%'这样的国家或像'%country1%'这样的城市)它不起作用 –